Параметр login_hint
Часто клиентское приложение заранее знает логин пользователя, и было бы удобно сразу подставить значение логина в форме аутентификации. В качестве такой подсказки спецификация OpenID Connect 1.0 предлагает необязательный параметр login_hint.
Данный параметр представляет собой подсказку для Центра Идентификации, которую он использует на странице аутентификации. Если указанный параметр передан и пользователь с таким логином зарегистрирован и не заблокирован в DSS, то его значение будет использовано в качестве логина, тем самым пользователю останется только ввести свой пароль. Если же пользователя с таким логином нет или его учётная запись заблокирована, то параметр будет проигнорирован.
Параметр login_hint определён для двух сценариев: с использованием кода авторизации и с неявным разрешением (см. Authorization Code Flow и Implicit Flow).
Примеры запросов
Рассмотрим пример запроса, содержащего параметр login_hint (переносы строк добавлены для наглядности):
GET /authorize?
client_id=eea2fd3f-5c70-4d74-a594-f1e7bf81b4d7
&resource=https:%2f%2fdss.cryptopro.ru%2fSignServer%2frest%2fapi
&redirect_uri=http:%2f%2f127.0.0.1:9158%2f
&response_type=code
&login_hint=sga HTTP/1.1
Host: dss.cryptopro.ru
Получение имени пользователя из id_token
Клиентское приложение может получить имя пользователя из id_token. Рассмотрим пример содержимого id_token:
{
"unique_name": "sga",
"dss_iss": "realsts",
"dss_uuid": "49pDZfxUwFjeHhYSsrSX2LvdSxA=",
"role": "Users",
"dss_group": "Default",
"at_hash": "yQAbEebC9sgmXrjonanKPQ",
"iss": "realsts",
"aud": "cryptopro.cloud.csp",
"exp": 1527844466,
"nbf": 1527844166
}
В id_token логин пользователя содержится в утверждении unique_name. В данном примере это sga. Однако клиентскому приложению следует обратить внимание не только на значение этого утверждения, но и на значение утверждения dss_iss. В нём содержится идентификатор Центра Идентификации, осуществившего аутентификацию пользователя. Использовать значение unique_name в качестве параметра login_hint можно только в случае, если dss_iss равен realsts. Значение realsts говорит о том, что в unique_name находится логин пользователя в ЦИ DSS, а не логин из стороннего ЦИ. Например, unique_name из такого маркера использовать нельзя:
{
"unique_name": "sga@dss.cryptopro.ru",
"dss_iss": "adfs",
"dss_uuid": "49pDZfxUwFjeHhYSsrSX2LvdSxA=",
"role": "Users",
"dss_group": "Default",
"at_hash": "yQAbEebC9sgmXrjonanKPQ",
"iss": "realsts",
"aud": "cryptopro.cloud.csp",
"exp": 1527844466,
"nbf": 1527844166
}