AddIdentityServerAuthentication 和 AddJwtBearer 区别
1 在 api 资源客户端 使用 AddIdentityServerAuthentication 兼容 jwt和referencetoken(短token) 授权代码如下:
在 Startup.cs 中ConfigureServices 方法使用如下代码:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme) .AddIdentityServerAuthentication(options => { options.Authority = Config.IdentityServerUri; // id4 server 地址 options.ApiName = Config.ApiName; // api 名 options.ApiSecret = Config.ApiSecret; // 配置的 api 秘钥 使用 references token 要用到 options.RequireHttpsMetadata = false; // 不需要 https });
2 在 api 资源客户端 使用 AddAuthentication 和 AddJwtBearer 兼容 jwt和referencetoken(短token) 授权代码如下:
在 Startup.cs 中ConfigureServices 方法使用如下代码:
// nuget 安装 Microsoft.AspNetCore.Authentication.JwtBearer // jwt tokens services.AddAuthentication(OAuth2IntrospectionDefaults.AuthenticationScheme) .AddJwtBearer("Bearer", options => { options.Authority = Config.IdentityServerUri; // 设置 https options.RequireHttpsMetadata = true; options.Audience = Config.ApiName; // 支持 jwt 和 reference 两种 token // if token does not contain a dot, it is a reference token options.ForwardDefaultSelector = context => "Introspection"; }); // reference tokens services.AddAuthentication("Introspection") .AddOAuth2Introspection("Introspection", options => { options.Authority = Config.IdentityServerUri; // this maps to the API resource name and secret options.ClientId = Config.ApiName; // api 名 options.ClientSecret = Config.ApiSecret; // 配置的 api 秘钥 });
3 jwt token 和 reference token 区别
jwt token
在资源端(API)就可以完成验签的过程,不需要每次再去资源端验签以减少网络请求,缺点就是生成的 Token 会很长,另外 Token 是不可撤销的,Token 的生命周期(被验证通过)会一直到票据过期,如果泄露就会比较麻烦
reference token
当使用 Reference token 的时候,服务端会对 Token 进行持久化,当客户端请求资源端(API)的时候,资源端需要每次都去服务端通信去验证 Token 的合法性[/connect/introspect],IdentityServer4.AccessTokenValidation 中间件中可以配置缓存一定的时候去验证,并且 Token 是支持撤销[/connect/revocation]的
参考链接
关于 IdentityServer4 中的 Jwt Token 与 Reference Token
https://cloud.tencent.com/developer/article/1644831