Предоставляет ли keycloak возможность различать guish между входами одного и того же пользователя на разных устройствах - PullRequest
0 голосов
/ 27 мая 2020

Предоставляет ли keycloak возможность различать guish между входами одного и того же пользователя на разных устройствах (пользователь может войти в систему на мобильных устройствах, а также в браузерах на настольных компьютерах).

Предоставляет ли keycloak способ определить, когда пользователь ввел свои учетные данные (будь то через вход в keycloak или с помощью потока поставщика удостоверений)?

Наш пример использования:

  • пользователь может запросить сброс своего пина (из нашего приложения).
  • пользователь вышел из системы (/logout с использованием промежуточного программного обеспечения 'keycloak-connect').
  • после выхода пользователь является перенаправляется на вход и вводит учетные данные (keycloak или поставщик удостоверений).
  • при входе в систему пользователю отображается страница «введите новый PIN-код» (наше приложение).

Кому для достижения этого мы хотим иметь возможность определять серверную сторону, когда отправлять страницу «введите новый пин».

Наша ситуация такова, что мы не можем легко узнать (по разным причинам, включая активный сеанс Keycloak или другие срок действия токена / активный st ates) при фактическом входе в систему «введены учетные данные».

Можно ли использовать session_state из токена доступа keycloak для определения сеанса keycloak, которому соответствует запрос клиента?

Может ли что-то вроде следующая работа:

  • сервер получает токен доступа keycloak (содержащий session_state) от входа keycloak,
  • сервер передает session_state клиенту (браузеру / mobile app),
  • клиент передает это session_state обратно на сервер вместе с пользователем, запрашивающим действие,
  • сервер запрашивает информацию о сеансе у keycloak (что-то вроде строк сделав следующий запрос к локальному хосту REST API администратора: 8080 / auth / admin / realms / demo / users / {{user_id}} / sessions - затем проверив session_state каким-то образом?)
  • если 'start 'значение сеанса, возвращаемое REST API, является недавним, тогда, возможно, у нас есть' фактическая 'информация для входа?

Мы все еще используем Keycloak 6.0.1

Любой привет p очень ценится.

1 Ответ

0 голосов
/ 27 мая 2020

Я хотел сообщить, как я поступаю, что, как мне кажется, дает мне все, что я хочу с точки зрения решения / ответа на мой исходный вопрос.

Токен доступа к Keycloak включает в себя: «sub», «auth_time» и «session_state».

{
  "sub": "ae384e77-7588-444b-9c4f-3dc920750e1f",
  "auth_time": 1590555910,
  "session_state": "2d735372-1a5a-43de-8a6c-1a45deebf20b",
}

Я могу использовать подпрограмму для запроса REST API администратора Keycloak с помощью https://my-domain.com/auth/admin/realms/demo/users/{{sub}}/sessions, который дает список вроде:

[

  {
    "id": "2d735372-1a5a-43de-8a6c-1a45deebf20b",
    "username": "20000",
    "userId": "ae384e77-7588-444b-9c4f-3dc920750e1f",
    "ipAddress": "52.62.57.52",
    "start": 1590555910000,
    "lastAccess": 1590555910000,
    "clients": {
      "4eb676c2-94c3-4bac-a423-94a7bf57ece0": "demo"
    }
  }
]

Затем я могу выбрать из возвращенного списка сеансов, совпадающих от id до session_state из токена доступа (nb, start из списка сеансов соответствует auth_time из токена доступа.

Это дает мне то, что мне нужно. Я могу передать исходное session_state клиенту и запросить от keycloak, соответствующий этому session_state :)

Я обновлю, если я возникают проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...