项目:.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”,但没有两者都可以,那么一切正常。
我在这里做错了什么?任何帮助表示赞赏。
关于, 马杜