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