当前位置: 首页 > 知识库问答 >
问题:

如何获取access token:keydape中的角色

越嘉石
2023-03-14

我想做的是:

>

  • 我有一个应用程序可以接收登录凭据:用户的用户名和密码。我有一个rest api,它在内部调用keydape rest api:/auth/realms/realmname/protocol/openid connect/token,并获取该用户的访问令牌。

    现在,我正在构建另一个RESTAPI来访问我希望执行以下操作的资源:doSomething(accesstoken,data)

    {

    a) 调用keydape API验证访问令牌并获取角色

    b) 如果角色==经理,流程(数据)

    c) 否则:返回错误消息。

    }

    现在,我该如何做(a):验证访问令牌并获取与之关联的角色。我知道我们可以这样做:auth/realms/realmname/protocol/openid connect/userinfo,但这只提供了有关用户的详细信息,如姓名、电子邮件等,但不显示任何角色。下面是我得到的一个例子:

    {
        "name": "test user",
        "sub": "e2bad34d-a1a9-4d70-ac84-bd3a3246023e",
        "email_verified": false,
        "preferred_username": "user",
        "given_name": "test",
        "family_name": "user"
    }
    

    如图所示,它根本没有给出角色。然后,我如何知道该访问令牌具有哪些角色?有趣的是,当我搜索这个时,许多参考资料都建议使用上面的userinfoendpoint。但这仅仅告诉我,我提供的访问令牌是有效的。没有为此指定角色。换句话说,它进行身份验证,但不授权。

    请建议。

    谢谢,阿南


  • 共有3个答案

    周学义
    2023-03-14

    在角色部分添加角色后,需要将可用角色移动到相应客户端部分的范围选项卡的已分配角色中。

    傅树
    2023-03-14

    此外,如果不允许使用整个范围,则需要将相关角色添加到范围中,以便它们可以出现在令牌中。

    邢华清
    2023-03-14

    在KeyCloak管理控制台中,可以在客户端下配置映射器。添加一个类型为“用户领域角色”的内置映射器,然后打开其配置,例如,如果需要,更改令牌声明名称。

    客户机角色可以进行类似的配置,但默认情况下,它们会在名为resource_access的令牌中返回${client_id}。角色

    客户端可以解析令牌以查找角色。例如,在angular应用程序中,使用key斗篷angular适配器,可以通过调用key斗篷将令牌作为json对象。GetKeyDoveInstance()。已解析标记。

    在Spring Boot应用程序中,使用KeyClope java api,您可以在下面的类中的字段“otherClaim”下找到角色https://www.keycloak.org/docs-api/10.0/javadocs/org/keycloak/representations/AccessTokenResponse.html

    在这两种表示中,您将在客户机映射器配置中定义的“令牌声明名称”下找到角色

     类似资料:
    • 我想知道为用户分配的站点角色名称列表。所以我试着如下, 我只能看到用户的常规类型角色。不是网站类型。但在我的情况下,用户是网站管理员。那么如何使用api调用获取用户的站点角色名称呢?

    • 我试图在父div内获得可拖动div的左上角的坐标。我可以在父div中获取鼠标的坐标,这是通过一个标签完成的。我想知道是否有任何类似的标记,例如来获取div的坐标 我使用标签,但它不起作用。

    • 我试图制作一个命令,显示提及用户的角色。这个命令是一个测试命令,我将在mute命令中实现它。(命令将删除成员的当前角色并添加静音角色) 这就是我所拥有的: 希望有人能帮我。 谢了!

    • 问题内容: 使用angular时,在视图内获取对象的首选方法是什么? 看起来好像有这个项目,但是看起来维护得不好。 https://github.com/gdi2290/angular- momentjs 问题答案: 有一个更受欢迎的angular-moment项目… https://github.com/urish/angular- moment 有了它,您可以像这样注入瞬间… jsfiddle

    • 如何获取selectbox当前选中的选项值? 我尝试了下面的代码,但它不起作用。 任何帮助都将不胜感激。

    • 我的用例是: 我想为现有S3存储桶的PUT事件执行一个lambda函数。 问题是,在CloudForm或CDK中,您不能为现有存储桶添加通知,只能为已创建的存储桶添加通知。 为了解决这个问题,我尝试使用一个自定义资源,将Lambda函数添加到putda通知中。我在CloudFormation中工作得很好,但我现在正尝试使用CDK来做类似的事情。 为了模拟我在Cloud形成中拥有的内容,我需要在现有