Keycloak 如何在访问令牌中指定特定于客户端的自定义属性

Keycloak 如何在访问令牌中指定特定于客户端的自定义属性,keycloak,access-token,clientcredential,Keycloak,Access Token,Clientcredential,我有一个keydape设置,我正在使用client_凭证流为数千个后端创建访问令牌 我希望在访问令牌中包含另一个自定义字段,因此在exp等旁边,我希望有一个字段publicKey。此字段对于每个客户端都是特定且唯一的 用钥匙斗篷可以吗 编辑:澄清我有许多后端,每个后端都有一个特定且唯一的公钥我假设您在索赔公钥中有一个硬编码值。如果是这样,这就足够了: 您可以创建一个发布令牌的自定义作用域。因此,假设您有一个客户端后端,它希望将用户令牌交换为serviceaccount令牌,以接触到下游服务客户端

我有一个keydape设置,我正在使用client_凭证流为数千个后端创建访问令牌

我希望在访问令牌中包含另一个自定义字段,因此在
exp
等旁边,我希望有一个字段
publicKey
。此字段对于每个客户端都是特定且唯一的

用钥匙斗篷可以吗


编辑:澄清我有许多后端,每个后端都有一个特定且唯一的
公钥

我假设您在索赔
公钥
中有一个硬编码值。如果是这样,这就足够了: 您可以创建一个发布令牌的自定义作用域。因此,假设您有一个客户端后端,它希望将用户令牌交换为serviceaccount令牌,以接触到下游服务客户端\u凭据\u服务,并且此serviceaccount令牌内部应具有
公钥
属性,下面是一种方法:

  • 在您的领域中,在管理UI中的
    客户机范围下创建并保存一个新范围。
    

  • 转到
    客户范围->公钥范围->映射器->创建
    并创建一个新的硬编码索赔,示例如下:
    

  • 打开客户端\u凭据\u服务并切换到选项卡客户端范围

  • 在这里,您可以将新范围作为默认范围或可选范围添加到客户端。可选意味着,在您向kcs令牌端点发出的请求中,您必须添加scope=publicKeyScope参数,以通过客户端_凭据流获取令牌。e、 g.像这样:

    curl --location --request POST 'http://localhost:8080/auth/realms/yourRealm/protocol/openid-connect/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'client_id=client_credentials_service' \
    --data-urlencode 'client_secret=your-secret' \
    --data-urlencode 'scope=email publicKeyScope' \
    --data-urlencode 'grant_type=client_credentials'
    
    当它作为默认值添加时,您不必显式地将所需的范围添加到请求中

    只要您没有将此作用域(或相应的映射)添加到另一个客户端,只有通过客户端凭据流获得的客户端凭据服务令牌才会包含此声明


    结果标记示例:

    如何解析该值?它是每个客户端的一个特定的、永久的值吗?公钥是否总是相同的,还是可以根据请求更改?每个客户端都是相同的,并且是常量。嘿,Dominik,这适用于单个客户端。我有数千个客户,每个客户都有一个特定于该客户的公钥。我没有在上面的问题(隐式知识)中声明Hey Jonas,据我所知(仍然有一些隐式知识),您最好创建一个KeyClope扩展并实现一个自定义协议映射器。详细信息请参见acc的回答:(我现在正在使用智能手机)。这就是我的想法。我不认为我可以只安装keydepeat就完成它。还必须开发/安装一些东西。