Blazor server-side application用Microsoft.AspNetCore.Identity.EntityFrameworkCore实现Authorization 和 Authentication 完整教程。

本方案只适用于Blazor Server-Size Application

完整项目源代码,参考: https://github.com/neozhu/CleanArchitectureWithBlazorServer

需要引用的类库如下:

    <PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="7.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Duende.IdentityServer" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.AspNetIdentity" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.EntityFramework" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.EntityFramework.Storage" Version="6.2.0" />
<PackageReference Include="Duende.IdentityServer.Storage" Version="6.2.0" />

  

这里的实现方式和Asp.net core 3.0,5.0,6.0, 7.0 几乎一样的配置,但又也有一些特殊之处。下面我分享一下的代码。

从上面引用的类库发现我并使用的是Microsoft.AspNetCore.Identity.EntityFrameworkCore + Duende.IdentityServer 都已经升级到最新版本。

配置 Microsoft.AspNetCore.Identity.EntityFrameworkCore

用于生成需要后台表

这里和微软官方的文档略有不同我使用的AddIdentity方法。

添加 Authorization and Authentication 配置

这类servicescollection配置和asp.net core cookie认证是一直,只是这里不需要配置Login,Logout路径

开发一个登录Blazor Component(Page)

重点这里需要生成一个Token,而不是直接传用户名+密码,因为安全 不能明文传输密码。这里我们需要调用auth/login?token=.... 实现登录

AuthController 用户登录并获取授权

这里的写法和asp.net core登录一样都使用SignInManager<ApplicationUser> 登录成功后和asp.net core应用一样保存于账号相关的所有授权比如Roles和Claims

如何需要自定义添加自定义的内容比如下面的TenantId TenantName ,ApplicationClaimsIdentityFactory就是用于添加需要内容。

获取当前登录的账号信息

之前Blazor Server-Side application 是不支持 IHttpContextAccessor获取账号信息,现在竟然可以了。

Blazor server Component调用UserManager<ApplicationUser>需要注意的地方

Component需要继承 添加 @inherits OwningComponentBase

需要通过ScopedServices.GetRequiredService<UserManager<ApplicationUser>>(); 创建才安全

希望对学习Blazor的同学有帮助。

最新文章

  1. JSP以及JSP解析原理
  2. 2016暑假多校联合---Counting Intersections
  3. ios 距离传感器和摇一摇
  4. 原生JS默认设置默认值的写法
  5. [Mac]Mac Xcode 删除已经下载好的模拟器版本
  6. Facebook的Pop动画库相关资料
  7. Poj 3259 Wormholes(spfa判负环)
  8. -_-#【Canvas】绘制文本
  9. 霍尔开关MH253ESO在减压神器指尖手指陀螺中的作用
  10. 201521123119《Java程序设计》第12周学习总结
  11. 福州大学软工1715|W班-启航
  12. xxl-job入门实践
  13. GAN (Generative Adversarial Network)
  14. luogu P2657 [SCOI2009]windy数 数位dp 记忆化搜索
  15. Redis深入之对象
  16. 奇怪的Excel导入问题,OleDbException (0x80004005): 未指定的错误
  17. sqlserver插入之字符串+数字
  18. 【转载】移动开发中的上下左右滑动插件jquery.swipe.js
  19. http://www.cnblogs.com/nick-huang/p/4848843.html
  20. MVC中关于 使用后台代码 检查 用户名是否已经被清册

热门文章

  1. 使用mysql5.7版本的mysqldump备份mysql8.0版本的数据库报错解决办法
  2. CentOS 7.x 升级OpenSSH
  3. 了解如何配置Nginx日志
  4. gitlab cicd流水线语法
  5. PostgreSQL 语法
  6. 工厂有了 ERP 系统,为什么还要上 MES 系统?
  7. 使Squashfs可写的办法
  8. day03-MySQL基础知识02
  9. MySQL开发
  10. Linux系统命令基础