会话验证端点在 AM5 中有效但在 AM6 中无效
Session validation endpoint worked in AM5 but doesn’t work in AM6
在过去的几天里,我一直在努力让 AM6(Forgerock 访问管理)使用与 AM5 相同的配置。在用户执行 OpenID Connect 授权代码流后,我正在尝试验证会话。
我的设置:
我部署了一个AM实例
已从常见任务配置 OpenID Connect。
从应用程序 -> OAuth 2.0 添加了一个 OAuth2 客户端。设置所有配置:重定向 uris、范围生命周期等并将“令牌端点身份验证方法”设置为 client_secret_post
(可选)添加默示同意 OAuth 2.0 客户端,然后设置服务 -> Oauth2 提供者 -> 同意 -> Allow clients to skip consent = true
我的代币使用情况:
将用户重定向到登录屏幕(并收到代码)后,我使用 form_params 向令牌端点 (/oauth2/access_token
) 创建了一个 POST
(
[client_id] => my_client
[client_secret] => my_client_pass
[code] => a5867a21-4d5a-4285-ba07-dcbe46d53bc6
[redirect_uri] => http://localhost:3000/auth/callback
[grant_type] => authorization_code
)
redirect_uri端点接收access_token
和id_token
(
[access_token] => e78569fb-e162-4e4f-ab5e-79ebeaf2ba94
[scope] => openid offline_access profile email
[id_token] => eyJ0eXAiOiJKV1QiLCJraWQiOiJiL.......
[token_type] => Bearer
[expires_in] => 35999
)
(问题出在这里) 然后我检查给定 id_token 的用户会话是否仍然有效(他有注销与否)
我使用
向会话端点 (/json/sessions
) 创建 POST
(
'headers' => [
'Accept-API-Version' => 'resource=1.2'
],
'query' => [
'_action' => 'validate',
'tokenId' => eyJ0eXAiOiJKV1QiLCJraWQiOiJiL082T.......
],
)
当针对 AM5 进行测试时,我得到
{"valid":true,"uid":"my-user-here","realm":"/"}
当针对 AM6.0.0.4 尝试时,我总是得到:
{"valid":false}
我是否遗漏了一些阻止生成的 openid id_token 在会话端点中可用的东西?
如果有人遇到同样的问题,我发现我错过了 AM6 中添加的一个重要设置:授权的 OIDC SSO 客户端。
这会强制您的会话 ID 与来自 OpenID Connect 的 id_token 相同。
另一种解决方案是研究使用 /oauth2/connect/checkSession
端点来验证令牌
在过去的几天里,我一直在努力让 AM6(Forgerock 访问管理)使用与 AM5 相同的配置。在用户执行 OpenID Connect 授权代码流后,我正在尝试验证会话。
我的设置:
我部署了一个AM实例
已从常见任务配置 OpenID Connect。
从应用程序 -> OAuth 2.0 添加了一个 OAuth2 客户端。设置所有配置:重定向 uris、范围生命周期等并将“令牌端点身份验证方法”设置为
client_secret_post
(可选)添加默示同意 OAuth 2.0 客户端,然后设置服务 -> Oauth2 提供者 -> 同意 ->
Allow clients to skip consent = true
我的代币使用情况:
将用户重定向到登录屏幕(并收到代码)后,我使用 form_params 向令牌端点 (
/oauth2/access_token
) 创建了一个 POST( [client_id] => my_client [client_secret] => my_client_pass [code] => a5867a21-4d5a-4285-ba07-dcbe46d53bc6 [redirect_uri] => http://localhost:3000/auth/callback [grant_type] => authorization_code )
redirect_uri端点接收
access_token
和id_token
( [access_token] => e78569fb-e162-4e4f-ab5e-79ebeaf2ba94 [scope] => openid offline_access profile email [id_token] => eyJ0eXAiOiJKV1QiLCJraWQiOiJiL....... [token_type] => Bearer [expires_in] => 35999 )
(问题出在这里) 然后我检查给定 id_token 的用户会话是否仍然有效(他有注销与否) 我使用
向会话端点 (/json/sessions
) 创建 POST( 'headers' => [ 'Accept-API-Version' => 'resource=1.2' ], 'query' => [ '_action' => 'validate', 'tokenId' => eyJ0eXAiOiJKV1QiLCJraWQiOiJiL082T....... ], )
当针对 AM5 进行测试时,我得到
{"valid":true,"uid":"my-user-here","realm":"/"}
当针对 AM6.0.0.4 尝试时,我总是得到:
{"valid":false}
我是否遗漏了一些阻止生成的 openid id_token 在会话端点中可用的东西?
如果有人遇到同样的问题,我发现我错过了 AM6 中添加的一个重要设置:授权的 OIDC SSO 客户端。
这会强制您的会话 ID 与来自 OpenID Connect 的 id_token 相同。
另一种解决方案是研究使用 /oauth2/connect/checkSession
端点来验证令牌