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

Oauth 2.0 如何获取access token:keydape中的角色,oauth-2.0,keycloak,openid-connect,keycloak-gatekeeper,Oauth 2.0,Keycloak,Openid Connect,Keycloak Gatekeeper,我想做的是: 我有一个应用程序可以接收登录凭据:用户的用户名和密码。我有一个rest api,它在内部调用keydape rest api:/auth/realms/realmname/protocol/openid connect/token 并获取此用户的访问令牌 现在,我正在构建另一个REST API来访问一个资源,我希望在其中执行以下操作: doSomething(accesstoken、数据) { a) 调用keydape API验证访问令牌并获取角色。 b) 如果角色==经理,流程(

我想做的是:

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

  • 现在,我正在构建另一个REST API来访问一个资源,我希望在其中执行以下操作: doSomething(accesstoken、数据)

    {

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

    请建议

    谢谢,
    Anand

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

    可以类似地配置客户端角色,但默认情况下,它们会在名为resource_access.${Client_id}.roles的令牌中返回

    客户端可以解析令牌以查找角色。例如,在angular应用程序中,使用KeyClope angular适配器,您可以通过调用KeyClope.GetKeyCloveInstance().tokenParsed将令牌作为json对象

    在spring引导应用程序中,使用KeyClope java api,您可以在下面的类中的字段“otherClaim”下找到角色


    在这两种表示中,您将在客户端映射器配置中定义的“令牌声明名称”下找到角色。此外,如果不允许完整作用域,则需要将相关角色添加到作用域中,以便它们可以显示在令牌中


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


    谢谢您的回复。这是否意味着我们需要为此解析令牌?我没有看到你在我收到的令牌中提到的任何类似于资源访问的内容。我们是否需要对令牌字符串进行编码以获取此数据?是的,您需要解析令牌,但任何客户端适配器都会以解析形式获取令牌。例如,我使用的是keydape angular,我可以从我的angular应用程序keydape.getkeydaperInstance().tokenParsed中进行以下调用。这会将令牌作为json对象获取。我的是一个spring启动应用程序。因为我有自己的RESTAPI客户端(内部使用okhttp),它按原样检索http响应。在这个阶段,我是否可以使用适配器或库来读取令牌?我甚至查看了这个类:。但它与用户角色无关。我在上面的链接检查“otherClaims”中希望在这个类中有一个函数,如:getRoles()。如果配置了客户端映射器,您将在OtherClaimsId下找到角色,您是否解决了问题?