Keycloak 用户角色 Angular 和 .net 核心

Posted

技术标签:

【中文标题】Keycloak 用户角色 Angular 和 .net 核心【英文标题】:Keycloak user roles angular and .net core 【发布时间】:2019-09-26 23:16:07 【问题描述】:

我有一个 Keycloak 问题。我想将用户角色添加到我的 Angular(客户端)/.net 核心(后端)应用程序。我没有经验,所以我看了这个教程: https://medium.com/@xavier.hahn/adding-authorization-to-asp-net-core-app-using-keycloak-c6c96ee0e655

我的客户将令牌发送到后端。在后端,我将 [Authorize] 属性添加到我的 Controller 类。如果我将 get 发送到后端,则授权过程可以正常工作,我会获取数据。但是,如果我将 [Authorize(Roles = "Administrators")] 设置为控制器方法,我会收到 403 错误:

Response _body: "", status: 403, ok: false, statusText: "Forbidden", headers: Headers, …
headers: Headers _headers: Map(5), _normalizedNames: Map(5)
ok: false
status: 403
statusText: "Forbidden"
type: 2
url: "http://localhost:64336/api/SampleData/authorization"
_body: ""
__proto__: Body

在访问令牌中设置了 user_roles:

 "user_roles": [
        "uma_protection",
        "Administrators",
        "Users"
      ],

有人知道出了什么问题,或者有人知道另一个教程吗?

非常感谢

密钥锁 4.8.3.

.net 核心 2.2

角度 7

【问题讨论】:

如果用户角色嵌套在 realm_access 下,请看这里:***.com/questions/53702555/… 【参考方案1】:

您需要验证您的设置是否正确。

在启动文件中:

 services.AddAuthorization(options =>
 
      options.AddPolicy("MyPolice", policy => policy.RequireClaim("myMapper", "MyRole"));
 );

在控制器文件中:

[HttpGet]
[Authorize(Policy = "myPolicy")]
public ActionResult Protect()

    return Ok("myPolicy work");

在 Keycloak 中,创建一个角色(Clients/Roles/Add Role): Create Role

在 Keycloak 中,创建一个映射器(Clients/Mapper/Create): Create Mapper

在 keycloak 中,为您的客户创建一个服务帐户角色(客户/服务帐户角色): Create membership between client and role

现在应该可以了:)

【讨论】:

以上是关于Keycloak 用户角色 Angular 和 .net 核心的主要内容,如果未能解决你的问题,请参考以下文章

使用 Keycloak Admin Java API 向用户添加角色

Python Keycloak 获取用户的角色和组

仅创建用户 Keycloak 角色?

我应该使用keycloak吗?

Keycloak:用户基于角色的客户端登录访问限制

Keycloak 授权 - 最佳实践角色与组