背景
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
- 如何定义各种方案呢?
如何实现 ISecurityTokenValidator?
- 拓展的意思是?
if (result.Succeeded)
{
await _userManager.AddToRoleAsync(_user, "User");
}
- 为何 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
参考:
-
https://www.noobit.dev/blog/coding/asp.net/authentication-with-custom-isecuritytokenvalidator-in-aspnet-core-3 通过扩展 security, 自定义一个验证器;
-
https://referbruv.com/blog/posts/getting-started-with-securing-apis-using-jwt-bearer-authentication-hands-on 验证器完成, 生成器用新的;
-
https://www.thecodehubs.com/create-and-validate-jwt-tokens-and-use-custom-jwt-middleware-in-asp-net-core-3-1/ 这一类的文章都是自建中间件实现的身份认证;
-
https://github.com/aspnet/Identity/blob/c7276ce2f76312ddd7fccad6e399da96b9f6fae1/src/UI/IdentityServiceCollectionUIExtensions.cs#L49 AddDefaultIdentity 的作用是?
-
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 端点发出的时候都可以使用服务端储存的会话信息。