首页 > 解决方案 > 会话验证端点在 AM5 中有效,但在 AM6 中无效

问题描述

在过去的几天里,我一直在努力让 AM6(Forgerock 访问管理)使用与 AM5 相同的配置。在用户执行 OpenID Connect 授权代码流之后,我正在尝试验证会话。

我的设置:

  1. 我已经部署了一个 AM 实例

  2. 从常见任务配置 OpenID Connect。

  3. 从 Applications -> OAuth 2.0 添加了一个 OAuth2 客户端。设置所有配置:重定向 uri、范围生命周期等并将“令牌端点身份验证方法”设置为client_secret_post

  4. (可选)添加对 OAuth 2.0 客户端的默示同意,然后设置服务 -> Oauth2 提供者 -> 同意 ->Allow clients to skip consent = true

我的令牌用法:

  1. 将用户重定向到登录屏幕(并接收代码)后,我/oauth2/access_token使用 form_params 向令牌端点 ( ) 进行 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
    )
    
  2. redirect_uri 端点接收access_tokenid_token

    (
        [access_token] => e78569fb-e162-4e4f-ab5e-79ebeaf2ba94
        [scope] => openid offline_access profile email
        [id_token] => eyJ0eXAiOiJKV1QiLCJraWQiOiJiL.......
        [token_type] => Bearer
        [expires_in] => 35999
    )
    
  3. (这里的问题)然后我检查用户的会话,给定的 id_token,是否仍然有效(他已经注销或没有)我向会话端点/json/sessions

    (
        '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 在会话端点中可用的东西?

标签: single-sign-onopenamforgerock

解决方案


如果有人偶然发现同样的问题,我发现我错过了 AM6 中添加的一个重要设置:Authorized OIDC SSO Clients

这会强制您的会话 id 与 OpenID Connect 中的 id_token 相同。

另一种解决方案是研究使用/oauth2/connect/checkSession端点来验证令牌


推荐阅读