使用OpenAM OpenID连接代理,我创建了一个名为Test-Client的OAuth 2.0 / OpenID连接客户端,其范围为openid .
我的OpenAM实例部署在Tomcat 7上,我调整了我的/ etc / hosts文件,将localhost显示为openam.example.com .
使用默认凭据,我可以使用以下方法检索OpenID Connect ID令牌:
curl -k -u Test-Client:password -d "grant_type=password&username=demo&password=changeit&scope=openid" -H "Content-Type: application/x-www-form-urlencoded" "http://openam.example.com:8080/openam/oauth2/access_token"
然后,如果我的承载令牌仍然有效(我的上述命令返回访问令牌),我可以检索OpenID用户信息:
curl POST -H "Authorization: Bearer {{access_token}}" -k -v "http://openam.example.com:8080/openam/oauth2/userinfo"
我的问题:
- 如何找到用于签署id_token JWT的秘密?
1 回答
我没有使用Open AM的经验,但是要验证ID令牌,您需要获取OpenID Connect提供程序的正确公钥(如果密钥是由非对称密码签名的) . 要获得它,您应该阅读其发现文档,该文档应位于
/.well-known/openid-configuration
. 在返回的JSON文档中,找到jwks_uri
值并加载该URL . 您将获得另一个包含服务器所有公钥的JSON文档 . 然后,您需要从ID令牌中找到一个kid
(密钥ID)值与kid
匹配的值 .如果令牌是对称密码签名,则没有标准化的分发方式 .
有关详情,请参阅:
http://openid.net/specs/openid-connect-discovery-1_0-21.html#ProviderConfigurationRequest
https://backstage.forgerock.com/docs/openam/13/admin-guide#openam-openid-discovery
https://developers.google.com/identity/protocols/OpenIDConnect#discovery