使用角色与 API 服务共同托管 Identity Server 4
Co-hosting Identity Server 4 with API services using Roles
我遇到过 example 在同一应用程序主机上共同托管 Identity Server 4 作为需要它进行身份验证和授权的 API 服务。
现在我可以通过纯身份验证成功复制它,但是当涉及到使用角色的授权时,我无法让它工作,即在我的控制器操作上添加 [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";
});
然后我从示例代码中看到了这一行(我最初在 post 中提到过)这似乎应该让我能够 运行 API 服务身份服务器方面:
services.AddLocalApiAuthentication();
但它似乎也没有达到我的要求。
那么 Identity Server 身份验证中间件是否允许我完成基于角色的身份验证,或者是否有我需要研究的其他机制(即策略)?
值得注意的是,我能够使用 Identity Server 4 成功完成所有这些,但是通过单独托管它们。我想看看如何将它们一起托管。
刚刚重新检查了 example,它工作得很好。
当你使用
services.AddLocalApiAuthentication();
它设置 IdentityServerAccessToken
身份验证方案。
要在您的 API 控制器中使用它,您输入
[Authorize(IdentityServerConstants.LocalApi.PolicyName)]
如文档中所述,或者只是
[Authorize(AuthenticationSchemes = "IdentityServerAccessToken")]
所有你需要检查角色的是属性的另一个参数:
[Authorize(AuthenticationSchemes = "IdentityServerAccessToken", Roles = "test role1")]
我遇到过 example 在同一应用程序主机上共同托管 Identity Server 4 作为需要它进行身份验证和授权的 API 服务。
现在我可以通过纯身份验证成功复制它,但是当涉及到使用角色的授权时,我无法让它工作,即在我的控制器操作上添加 [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";
});
然后我从示例代码中看到了这一行(我最初在 post 中提到过)这似乎应该让我能够 运行 API 服务身份服务器方面:
services.AddLocalApiAuthentication();
但它似乎也没有达到我的要求。
那么 Identity Server 身份验证中间件是否允许我完成基于角色的身份验证,或者是否有我需要研究的其他机制(即策略)?
值得注意的是,我能够使用 Identity Server 4 成功完成所有这些,但是通过单独托管它们。我想看看如何将它们一起托管。
刚刚重新检查了 example,它工作得很好。
当你使用
services.AddLocalApiAuthentication();
它设置 IdentityServerAccessToken
身份验证方案。
要在您的 API 控制器中使用它,您输入
[Authorize(IdentityServerConstants.LocalApi.PolicyName)]
如文档中所述,或者只是
[Authorize(AuthenticationSchemes = "IdentityServerAccessToken")]
所有你需要检查角色的是属性的另一个参数:
[Authorize(AuthenticationSchemes = "IdentityServerAccessToken", Roles = "test role1")]