Мне пришлось копаться в этом по своим причинам и я написал это, поэтому я опубликую здесь то, что узнал ...
Во-первых, я отвечу на вопрос, рискуя заявить очевидное: токену ID нельзя доверять, и его содержимое следует игнорировать, если текущее время больше, чем истекшее время. В ответе спрашивающего указано, что после первоначальной аутентификации пользователя ID-токен больше не используется. Однако, поскольку токен идентификатора подписан поставщиком удостоверений, он, безусловно, может быть полезным в любое время, чтобы дать возможность надежно определить, кем является пользователь, другим службам, которые приложение может использовать. Использование простого идентификатора пользователя или адреса электронной почты не надежно, потому что его можно легко подделать (любой может отправить адрес электронной почты или идентификатор пользователя), но поскольку токен идентификатора OIDC подписан сервером авторизации ( который также обычно имеет то преимущество, что является третьей стороной) его нельзя подделать, и он является гораздо более надежным механизмом аутентификации.
Например, мобильное приложение может захотеть сообщить серверной службе , кто пользователь, который использует приложение, и это может потребоваться по прошествии короткого периода времени после начальной аутентификации, когда время истечения срока действия ID-токена и, следовательно, его нельзя использовать для надежной аутентификации пользователя.
Следовательно, точно так же, как токен доступа (используемый для авторизации - указывающий какие разрешения есть у пользователя) может быть обновлен, можете ли вы обновить токен идентификатора (используемый для аутентификации - указав < em> кто пользователь)? Согласно спецификации OIDC, ответ неочевиден. В OIDC / OAuth есть три «потока» для получения токенов: поток кода авторизации, неявный поток и гибридный поток (которые я пропущу ниже, потому что это вариант двух других).
Для неявного потока в OIDC / OAuth вы запрашиваете токен идентификатора в конечной точке авторизации, перенаправив пользователя в браузере на конечную точку авторизации и включив id_token
в качестве значения параметра запроса response_type
. ТРЕБУЕТСЯ неявный ответ успешной аутентификации потока для включения id_token
.
Для потока кода аутентификации клиент указывает code
в качестве значения параметра запроса response_type
при перенаправлении пользователя на конечную точку авторизации. Успешный ответ включает код авторизации. Клиентский клиент делает запрос к конечной точке токена с кодом авторизации и, согласно Основной раздел OIDC 3.1.3.3 Успешный ответ токена ответ ДОЛЖЕН содержать токен идентификатора.
Таким образом, для любого потока вы изначально получаете идентификатор ID, но как его обновить? Раздел 12 OIDC: Использование токенов обновления содержит следующее заявление о Обновить ответ токена:
После успешной проверки токена обновления телом ответа является ответ токена из раздела 3.1.3.3, за исключением того, что он может не содержать id_token.
Он может не содержать ID-токен, и, поскольку не указан способ принудительного включения ID-токена, вы должны предполагать, что ответ не будет содержать ID-токен. Таким образом, технически не существует определенного способа «обновить» токен ID с помощью токена обновления. Следовательно, единственный способ получить новый идентификатор ID - это повторно авторизовать / аутентифицировать пользователя, перенаправив пользователя на конечную точку авторизации и запустив неявный поток или поток кода аутентификации, как описано выше. Спецификация OIDC добавляет параметр запроса prompt
в запрос авторизации поэтому клиент может запросить, чтобы сервер авторизации не запрашивал у пользователя какой-либо пользовательский интерфейс, но перенаправление все равно должно происходить.
person
Scott Willeke
schedule
30.10.2015