Конечная точка проверки сеанса работает в AM5, но не работает в AM6 - PullRequest
0 голосов
/ 30 августа 2018

Последние несколько дней я изо всех сил пытался заставить AM6 (Forgerock Access Management) работать с той же конфигурацией, что и AM5. Я пытаюсь проверить сеанс после того, как пользователь выполнил поток кода авторизации OpenID Connect.

Моя настройка:

  1. Я развернул экземпляр AM

  2. Сконфигурированный OpenID Connect из общих задач.

  3. Добавлен клиент OAuth2, из Приложений -> OAuth 2.0. Настройте все конфигурации: перенаправьте Uris, время жизни областей и т. Д. И установите «Метод аутентификации конечной точки токена» на client_secret_post

  4. (ДОПОЛНИТЕЛЬНО) Добавлено подразумеваемое согласие для клиента OAuth 2.0, а затем установите Службы -> Поставщик Oauth2 -> Согласие -> Allow clients to skip consent = true

Использование моего токена:

  1. После перенаправления пользователя на экран входа в систему (и получения кода) я выполняю POST для конечной точки токена (/oauth2/access_token) с помощью form_params

    (
        [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_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
    )
    
  3. (ЗДЕСЬ ПРОБЛЕМА) Затем я проверяю, действителен ли сеанс пользователя с данным id_token (он вышел из системы или нет) Я делаю POST к конечной точке сеансов (/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 быть доступным в конечной точке сеансов?

1 Ответ

0 голосов
/ 24 сентября 2018

Если кто-то сталкивается с той же проблемой, я обнаружил, что пропустил важный параметр, добавленный в AM6: Авторизованные клиенты OIDC SSO .

Это заставляет ваш идентификатор сессии быть таким же, как ваш id_token из OpenID Connect.

Другим решением будет использование конечной точки /oauth2/connect/checkSession для проверки токена

...