我已经创建了asp.net mvc 6应用程序并使用实体框架7配置了asp.net身份用户正常工作 . 然后我添加了 AspNet.Security.OpenIdConnect.Server
令牌提供程序服务器,它也正常工作 .
然后我创建了一个api控制器,如下所示:
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET: api/values
[Authorize(Policy = "SomePolicy")]
[HttpGet]
public IEnumerable Get()
{
return new string[] { "value1", "value2" };
}
}
问题:我想以这样的方式配置授权,以便承载令牌或asp.net身份用户有效(并且属于某个角色),我想允许用户访问API .
这是我在startup.cs中尝试的:
services.AddAuthorization(options => {
// Add a new policy requiring a "scope" claim
// containing the "api-resource-controller" value.
options.AddPolicy("API", policy => {
policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme);
policy.RequireClaim(OpenIdConnectConstants.Claims.Scope, "offline_access");
});
});
然后,如果我将 [Authorize(Policy="API")]
添加到我的api控制器,那只是尊重承载令牌,而不是身份用户 .
任何帮助表示赞赏!
1 回答
policy.AddAuthenticationSchemes
支持多种方案,所以你可以 - 理论上 - 做类似的事情:或者,您也可以删除
policy.AddAuthenticationSchemes
调用并配置承载和cookie中间件以使用自动身份验证(AutomaticAuthenticate = true
,这是Cookie中间件的默认值,但不适用于JWT中间件) .在实践中,它绝对是 not recommended ,因为它击败了使用仅承载身份验证的整个目的:减轻XSRF攻击 . 如果您真的想支持cookie承载认证,那么 should strongly 考虑实施XSRF对策 .