【发布时间】:2021-02-15 21:35:36
【问题描述】:
我遇到了example,它与需要身份验证和授权的 API 服务在同一应用主机上共同托管 Identity Server 4。
现在我能够通过纯身份验证成功复制它,但是在使用角色进行授权时,我无法让它工作,即在我的控制器操作上添加 [Authorize(Roles = "My Role")] 属性。
访问令牌包含“角色”范围和声明,但似乎根本没有受到尊重。
我最初尝试了下面的代码,但它根本不执行 JWT Bearer 位,这让我相信 Identity Server 使用它自己的处理程序来达到这个目的,我根本不知道如何配置它。
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
// JWT tokens (default scheme)
.AddJwtBearer(options =>
{
options.Authority = "https://localhost:44367/";
options.Audience = "API";
options.TokenValidationParameters.RoleClaimType = "role";
});
然后我从示例代码中发现了这一行(我在这篇文章中最初提到过),它似乎应该授予我与 Identity Server 一起运行 API 服务的能力:
services.AddLocalApiAuthentication();
但它似乎也没有做我想要的。
那么 Identity Server 身份验证中间件是否允许我完成基于角色的身份验证,或者是否有其他一些我需要研究的机制(即策略)?
值得注意的是,我能够使用 Identity Server 4 成功完成所有这些工作,但需要单独托管。我想看看如何将它们全部托管在一起。
【问题讨论】:
标签: identityserver4 roles