.NET Core 2.1中的多个JWT承载身份验证-索赔问题

时间:2019-02-18 13:32:40

标签: authentication jwt asp.net-core-2.1 bearer-token

项目:.net core 2.1 API

在我的项目中,我要求包括2个jwt承载身份验证。

a)我们在内部创建令牌jwt并将其用于身份验证

b)我们从外部第三方获得jwt令牌,并且还需要对此进行身份验证。

我在启动时尝试了以下代码:

 services.AddAuthentication( )
 .AddJwtBearer("InteralBearer", options =>
 {
     SymmetricSecurityKey key = TokenGenerator.GenerateKey();
     options.Audience = "***************";
     options.TokenValidationParameters = new TokenValidationParameters
     {
         ValidateIssuer = true,
         ValidIssuer = "***************",
         ValidateAudience = true,
         ValidAudience = "***************",
         ValidateIssuerSigningKey = true,
         IssuerSigningKey = key,
         ValidateLifetime = true
     };
 })
 .AddJwtBearer("ExternalBearer", options =>
 {
     options.Audience = "***************";
     options.Authority = "***************";
 });



services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("ExternalBearer", "InteralBearer")
.Build();

options.AddPolicy("Applicant", new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .AddAuthenticationSchemes("ExternalBearer", "InteralBearer")
    .RequireClaim("role", "Applicant")
    .Build());
});

在我的控制器中,我有:

[ApiController]
[Authorize(Policy = "Applicant")]
public class ApplicantController : ApplicantAbstract
{
}

我也有自定义自动过滤器:

public class SelfAuthorizationFilter : IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        ClaimsPrincipal principal = context.HttpContext.User;
        ........
    }
}

当我在上面进行设置时,问题是context.HttpContext.User不返回任何声明作为请求中“ Identity”对象的一部分。我希望“声明”对象具有已配置的不同声明。

如果我同时拥有“ InternalBearer”或“ ExternalBearer”,但没有两者都可以,那么一切正常。

我在这里做错了什么?任何帮助表示赞赏。

关于, 马杜

0 个答案:

没有答案