我目前使用的是Keycloft 9.0.0。当使用代码流进行身份验证并交换此代码时,我收到了一个没有at_hash
声明的id令牌。
如何配置Keycloft以在id令牌中包含at_hash
声明?
背景:
我使用的是一个"经典"的服务器端渲染(SSR(程序,一个机密客户端。我正在向本地http api发送请求。但我也有一个Angular客户。SSR是一个使用github.com/coreos/Go-oidc的Go程序。需要身份验证的呈现页面会将访问者重定向到keycloft,然后通过redirect_uri返回。由于访问者已登录,其id令牌存在于会话中,并且我还传递访问令牌。然而,id令牌没有at_hash
声明,因此访问令牌验证失败。
我也有这个网站的移动网络版本,在Angular中,它在登录后发送一个承载访问令牌。这个应用程序使用代码流+pcke。
两者都应该能够发送经过身份验证的请求,但由于我使用的几乎是Go唯一可用的oidc客户端库,因此需要在id令牌中提供at_hash
声明才能验证访问令牌。该包当前不支持内省终结点。
id令牌和访问令牌都是从IDP返回的。但两者都没有at_hash
的说法。
根据OIDC,只有在颁发访问令牌时,at_hash
才是强制性的。请确保您使用的是response_type=id_token token
,而不是response_type=id_token
。