当客户端设置指定 RS256 时,为什么 keycloak 使用 HS256 算法来签名访问令牌?

sis*_*isi 10 digital-signature jwt keycloak keycloak-rest-api

我对 keycloak 身份验证服务器和应用程序进行了以下设置:

  1. 用户在应用程序客户端登录,发送un/pw到服务器
  2. 应用程序服务器向 keycloak 服务器发送 un/pw 以获得令牌
  3. keycloak 服务器将令牌发送回应用程序服务器
  4. 应用服务器输出含有敏感数据的网页

我想使用 RS256 来签署我的令牌。当我尝试在客户端获取令牌时,它们会使用 RS256 正确签名,但一旦我尝试在应用程序服务器上获取令牌,就会使用 HS256。在这两种情况下如何设置 keycloak 使用 RS256?

我使用 /auth/realms/{REALM_NAME}/protocol/openid-connect/token 端点和 keycloak 10.0.1。

钥匙斗篷配置:

    • 领域的默认签名算法设置为 RS256
    • 第一个配置:领域密钥为 HS256、AES 和 RS256(按此顺序列出),优先级均为 100
    • 第二个配置:我将RS256按键优先级设置为更高的值,但使用HS256
    • 作为最后一次尝试,我使该领域中的所有其他关键都处于被动状态。签署令牌时,keycloak 只是生成一个“后备 hs256”密钥来代替活动的 rs256 密钥。
  • 客户
    • 客户端的访问令牌签名算法和ID令牌签名算法设置为RS256
    • 客户是公开的
    • 有效的重定向 URI 包含应用程序服务器当前运行的域(这是 localhost,但我的计算机有一个域名)
    • Web 起源设置为“+”(据我所知,它从有效的 red.uris 复制条目)

要求:

  • 应用程序客户端和应用程序服务器请求中的 Origin、Referer 和 Content-Type 标头匹配
  • 浏览器和邮递员都按预期作为客户端工作
  • 应用程序服务器是php,我使用curl来发出post请求(客户端也发出post请求)
  • 客户端和应用服务器都在本地计算机上运行

谷歌似乎没有返回与我的问题相关的结果。修改任何设置后重新启动 keycloak 服务器似乎也不会带来任何结果,因此我假设我所做的任何更改都会自动使用。