.NET JwtBearer身份验证-使用访问令牌获取ID令牌

wrrgggsh  于 2023-03-09  发布在  .NET
关注(0)|答案(1)|浏览(227)

我有一个.NET 6 API,它使用AddJwtBearer从调用方接受JWT访问令牌。该API能够成功接受/解析访问令牌,但我需要从OpenID Connect授权服务器获取其他用户信息。是否没有内置的方法使用现有的访问令牌在.NET 6中实现这一点?由于策略原因,我无法将其他信息直接包含在访问令牌中。
我已经找过了,但到目前为止什么也没找到。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
      .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, jwt =>
       {
         jwt.TokenValidationParameters = new TokenValidationParameters
           {
             ValidateIssuer = true,
                       ....
            ;
                
         });
bnl4lu3b

bnl4lu3b1#

JwtBearer提供了各种各样的地方,你可以在那里添加你自己的事件处理,下面的图片我做了概述什么是可用的:

在代码中,可以按如下方式访问这些事件处理程序:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(opt =>
{
    opt.Audience = "payment";      
    opt.Authority = "https://localhost:6001";

    opt.Events.OnMessageReceived = context =>
    {
        // When Authenticate is called
        return Task.CompletedTask;
    };
    opt.Events.OnAuthenticationFailed = context =>
    {
        // When exceptions are thrown during request processing (invalid token...)
        return Task.CompletedTask;
    };
    opt.Events.OnChallenge = context =>
    {
        // Invoked before a challenge is sent back to the caller.
        return Task.CompletedTask;
    };
    opt.Events.OnForbidden = context =>
    {
        // Invoked if Authorization fails and results in a Forbidden response
        return Task.CompletedTask;
    };
    opt.Events.OnTokenValidated = context =>
    {
        // Token has passed validation and a ClaimsIdentity has been generated.
        return Task.CompletedTask;
    };
});

在您的情况下,可以使用TokenValidated事件请求其他用户信息。
如果您需要对JwtBearer进行故障排除,那么我在这里有一篇关于它的博客文章https://nestenius.se/2023/02/21/troubleshooting-jwtbearer-authentication-problems-in-asp-net-core/

相关问题