授权策略是否要求身份验证用户与多种形式的身份验证(cookie 和 JWT)兼容



我有一个带有Web API的 ASP.NET Core 2.2 MVC应用程序。我正在为 MVC 页面使用 cookie 身份验证,为 API 使用 JWT Bearer 身份验证。我遵循了描述的解决方案如何在核心 2.2 中实现 Cookie 基础身份验证和 jwt asp.net?这是基于 https://wildermuth.com/2017/08/19/Two-AuthorizationSchemes-in-ASP-NET-Core-2

当我想添加授权策略以确保整个站点可供经过身份验证的用户使用时,麻烦就来了

services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
}) 

当我这样做时,即使存在 atrribute[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)],JWT 持有者身份验证也会被忽略。因此,访问这些 API 控制器会返回重定向到登录页面。

如何启用授权策略并仍保持两种形式的身份验证?解决方法是将[Authorize]属性添加到所有控制器

构建AuthorizationPolicy时,可以组合 jwt 持有者架构和 asp.net 身份认证架构:

var policy = new  AuthorizationPolicyBuilder(new[] { JwtBearerDefaults.AuthenticationScheme, IdentityConstants.ApplicationScheme })
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));

以便通过 asp.net 身份进行身份验证和 JWT 令牌身份验证都可以访问您的受保护操作。

这似乎是 .Net 核心中的一个已知问题。我正在使用.NET Core 3.1,但仍未解决。

这是我的解决方法:

var principal = context.User;
if (!principal.Identity.IsAuthenticated)
{
return Task.FromResult(0);  //user not logged in
}

相关内容

  • 没有找到相关文章

最新更新