繁体   English   中英

如何通过自省验证 IdentityServer4 访问令牌

[英]How to validate IdentityServer4 access tokens through introspection

我正在通过 IdentityServer4 发布的 AccessToken 实现受保护的 api。 现在我的问题是,当我从我的客户端调用带有标头中的 Bearer 令牌的 API 时,是否有可能通过调用内省端点来恢复该值并验证它? 像这样的密钥没有自我验证:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            // base-address of your identityserver
            options.Authority = "https://demo.identityserver.io";

            // if you are using API resources, you can specify the name here
            options.Audience = "resource1";

            // IdentityServer emits a typ header by default, recommended extra check
            options.TokenValidationParameters.ValidTypes = new[] { "at+jwt" };
        });

是否有任何库可以通过依赖注入完成授权中间件中的所有操作,还是我必须手动完成所有操作? 我试图环顾四周,但似乎唯一的库引用了引用令牌,而不是作为 Bearer 传递的访问令牌。 谢谢

您可以挂钩OnMessageReceived事件并自己验证令牌:

services.AddAuthentication(...)
    .AddJwtBearer(
        options => {
            options.Events.OnMessageReceived = async context => {
                var accessToken = context.Token;

                // inject a custom token validator
                var tokenValidator =
                    context.HttpContext.RequestServices.GetRequiredService<ITokenValidator>();
                var ok = await tokenValidator.ValidateTokenAsync(accessToken);
                if (!ok) {
                    context.Fail("Invalid token");
                }
            };
        }
    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM