Зависит от того, как используется токен Identity. Обычно это только для клиента. Это позволяет клиенту аутентифицировать пользователя на основе обязательной заявки sub
. Не следует использовать для авторизации. Вот для чего нужен токен доступа.
В гибридном потоке (code + id_token) вы можете проверить подлинность пользователя перед запросом других токенов. В этом случае маленький токен является наиболее эффективным.
В потоке кода авторизации (коде) вам все равно придется запрашивать токены, используя код. Теперь это зависит от информации в id_token. Если id_token не содержит утверждений профиля, вам потребуется запросить информацию у конечной точки UserInfo.
Для доступа к конечной точке UserInfo вам нужен токен доступа. Отсутствующие утверждения aud
и iss
могут не представлять проблемы, поскольку вы запрашиваете токен у самого органа. Сдается мне, что издатель и аудитория известны на тот момент.
Обратите внимание, что id_token не используется для авторизации, поэтому не должно быть угрозы безопасности. Даже когда id_token используется совместно с ресурсами.
Спецификации требуют проверки полученного токена, как описано. Но когда вы не получаете новый id_token, зачем снова проверять текущий? Возможно, он не обновлен, но он уже подтвержден.
Так что ИМО оба варианта хороши, хотя я думаю, что первый вариант более распространен. Вероятно, что id_token отбрасывается после использования. Поскольку токен доступа используется для доступа к ресурсам (включая конечную точку UserInfo), а токен обновления - для обновления токена доступа.
Одно замечание, согласие пользователя используется в качестве фильтра. Если пользователь не дает согласия на информацию профиля, он вообще не будет доступен.