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