Asp Net Authentication 认证

2022-02-27

背景

spring boot 有 security 模块, .net 有 security. 但自定义一个中间件进行操作的形式并不 og; 在框架内扩展实现的行为才够 og; 为此, 我们了解如何使用 security

概念

Authentication is the process of determining a user's identity. Authorization is the process of determining whether a user has access to a resource. 验证是确认用户身份的过程; 授权是决策用户有没有权限进操作的过程;

两种是不同类型的校验;

权限处理的起始源码: I:\netcore\aspnetcore-main\src\Security\Authentication\Core\src\AuthenticationMiddleware.cs

AuthenticationServiceCollectionExtensions 各类扩展可以附加在 core 上, 路径在 src\Security\Authentication\Core\src\AuthAppBuilderExtensions.cs

Schemes 指的是各种方案

AuthorizationPolicy

  1. 如何定义各种方案呢?

如何实现 ISecurityTokenValidator?

  1. 拓展的意思是?
if (result.Succeeded)
{
    await _userManager.AddToRoleAsync(_user, "User");
}
  1. 为何 void 方法,DI failed!? https://stackoverflow.com/questions/50477799/cannot-access-a-disposed-object-asp-net-identity-core/50477983

源码位置

src/Security/Authentication/Core/src 关于认证核心 src/Security/Authentication/JwtBearer 关于 JWT 的认证和事件处理 src/Identity/Core/src 关于用户体系

搜索 JwtSecurityTokenHandler 有很多关于 JWT 的处理实现

样例: 简洁的使用 token 生产和消费 src/SignalR/samples/JwtSample/Startup.cs

样例: 通过依赖注入拿到当前的 option 再消费 src/Mvc/perf/benchmarkapps/BasicApi/Controllers/TokenController.cs 但其实是全局初始化以后单例注入进去的 src/Mvc/perf/benchmarkapps/BasicApi/Startup.cs

样例: 静态类进行复用, 涉及 token 生产和消费 src/Mvc/test/WebSites/SecurityWebSite/BearerAuth.cs

样例: 关于 JwtSecurityTokenHandler 的事件都是怎么处理的 src/Security/Authentication/test/JwtBearerTests.cs

参考:

  1. https://www.noobit.dev/blog/coding/asp.net/authentication-with-custom-isecuritytokenvalidator-in-aspnet-core-3 通过扩展 security, 自定义一个验证器;

  2. https://referbruv.com/blog/posts/getting-started-with-securing-apis-using-jwt-bearer-authentication-hands-on 验证器完成, 生成器用新的;

  3. https://www.thecodehubs.com/create-and-validate-jwt-tokens-and-use-custom-jwt-middleware-in-asp-net-core-3-1/ 这一类的文章都是自建中间件实现的身份认证;

  4. https://www.cnblogs.com/oukichi/p/9955791.html 自定义一个 User

  5. https://www.cnblogs.com/oukichi/p/10134346.html 注册登陆

  6. https://github.com/aspnet/Identity/blob/c7276ce2f76312ddd7fccad6e399da96b9f6fae1/src/UI/IdentityServiceCollectionUIExtensions.cs#L49 AddDefaultIdentity 的作用是?

  7. https://stackoverflow.com/questions/63115361/401-error-with-bearer-token-asp-net-core-3-1 自己生成 token

src\Identity\ApiAuthorization.IdentityServer\src\Authentication\AuthenticationBuilderExtensions.cs 如何漂亮的配置

大厂均使用 OAuth 2.0 认证的方式 https://docs.duendesoftware.com/identityserver/v6/quickstarts/4_ef/ https://documentation.openiddict.com/guides/index.html 另外一种流行的方式是使用 JWT 认证

https://github.com/vvo/iron-session 是维护了一个 session 去储存令牌和用户信息,一系列脚手架是为了包装 next.js 的 api 端点,当 api 端点发出的时候都可以使用服务端储存的会话信息。

copyright ©2019-2024 shenzhen
粤ICP备20041170号-1