首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keycloak:用于检查用户令牌是否具有特定资源的角色的API

Keycloak:用于检查用户令牌是否具有特定资源的角色的API
EN

Stack Overflow用户
提问于 2020-07-19 23:07:36
回答 1查看 993关注 0票数 0

我有一个keycloak服务器设置。我使用令牌端点:http://localhost:8080/auth/realms/demo/protocol/openid-connect/token对用户进行身份验证并生成令牌。据我所知,这个令牌可以在后续调用中使用,以验证它是否是有效用户。

但是,我不确定如何使用它来授权用户?ie验证此用户是否具有访问资源的角色。

我看到可以在client部分下配置资源URI。但一旦完成,我希望能够读取令牌并验证此用户是否具有访问此资源的角色。

现在,这就是我正在做的:我在这里使用了spring boot。

代码语言:javascript
复制
doSomething(String token)
{
 1. get token info using: http://localhost:8080/auth/realms/demo/protocol/openid-connect/userinfo
 2. from this get the roles the user has
 3. Manually check the roles required for the above function. (Right now, this is set in a simple switch statement)
 4. If the role obtained from step 2 matches what we get in step 3, go ahead. Else return failure.
}

我想知道上面的步骤3是否可以用更好的方式完成。我知道你可以通过keycloak控制台在客户端中设置资源。我所希望的是,我们可以将上面的4个步骤替换为如下所示:

代码语言:javascript
复制
keycloakAPIToAuthorizeToken(token,resource)

它将告诉我此用户是否具有访问此资源的角色(从token获得)。

如果这是可行的,请建议。

提前谢谢。Om

EN

回答 1

Stack Overflow用户

发布于 2021-01-09 01:20:40

有很多方法可以做到这一点。其中之一是使用Keycloak的角色,并将这些角色分配给用户。这样,在您的服务器/api中,您可以检查用户是否具有该角色,并继续或拒绝调用。

例如,在我的api项目中,我有一些系统管理员专用的端点,因此我有一个角色SystemAdministrators:

然后,如果您转到Users、Role Mappings,则可以将该角色添加到要设置为管理员的用户:

然后,任何api调用都应该包括一个持有者令牌(从Keycloak登录获得),在你的代码中,你可以解码这个jwt (这取决于你使用的是什么语言,我使用python,所以它很简单),它将有一个元素"realm_access“,里面有一个"role”元素,例如:

代码语言:javascript
复制
  "realm_access": {
      "roles": [
          "offline_access",
          "uma_authorization",
          "SystemAdministrators"
]

},

如果该元素包含角色SystemAdministrators,则表示该元素是系统管理员。

我发现这是最简单的方法。您可以使用角色属性来确定屏幕中的各个选项,等等(属性是键/值对,所以我实现的方式是,键是选项名称,值是权限级别,例如:"screen1":"read","screen2":"write",依此类推。为此,您需要使用keycloak admin api:https://www.keycloak.org/docs-api/6.0/rest-api/index.html#_roles_resource,它有许多可以帮助您的端点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62982005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档