Значение претензии 'sub' отличается для токенов доступа и Id - PullRequest
0 голосов
/ 18 октября 2018

Я использую поток предоставления пароля владельца ресурса, а также запрашиваю токен id (scope включает openid).В конечную точку я отправляю следующее:

  • client_id
  • client_secret
  • grant_type=password
  • username
  • password
  • scope

В ответ я получаю токен доступа и токен id.Значение для заявки sub отличается между двумя токенами.Почему это так?

Обновление

Кажется, что идентификатор пользователя на самом деле является oid заявкой.Это описано в Ссылка на токен Azure AD ID .

Текст, описывающий претензию oid:

Неизменный идентификатор объекта в системе идентификации Microsoft, в данном случае - учетная запись пользователя.Этот идентификатор однозначно идентифицирует пользователя в разных приложениях - два разных приложения, подписывающих одного и того же пользователя, получат одинаковое значение в заявке oid.Microsoft Graph вернет этот идентификатор как свойство id для данной учетной записи пользователя.Поскольку oid позволяет нескольким приложениям соотносить пользователей, для получения этой заявки требуется область profile.Обратите внимание, что если в нескольких арендаторах существует один пользователь, он будет содержать разные идентификаторы объектов в каждом арендаторе - они считаются разными учетными записями, даже если пользователь входит в каждую учетную запись с одинаковыми учетными данными.

Текст, описывающий sub претензию:

Принципал, о котором токен сообщает информацию, такую ​​как пользователь приложения.Это значение является неизменным и не может быть переназначено или использовано повторно.Субъект представляет собой парный идентификатор - он уникален для конкретного идентификатора приложения.Следовательно, если один пользователь входит в два разных приложения, используя два разных идентификатора клиента, эти приложения получат два разных значения для предмета заявки.Это может или не может быть желательным в зависимости от вашей архитектуры и требований конфиденциальности.

Однако мне все еще неясно, почему утверждение sub отличается между токенами access и id.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Тип предоставления учетных данных пароля владельца ресурса не должен использоваться для аутентификации пользователя в соответствии со спецификацией OpenID, только поток, взаимодействующий с пользователем через конечную точку авторизации , может делать это (т.е.Неявные потоки типа Код авторизации, Гибридный и Нет типа на момент написания).

Если вы получаете токен идентификатора с использованием потока ROPC, то поставщик удостоверений предлагает специальные средства, которые не входят в сферу действия OpenID.Спецификация Connect может иметь определенные и нестандартные функции, которые должны быть задокументированы.

В любом случае, на стороне Клиента вы должны полагаться только на утверждение sub в идентификационном токене.Клиент не должен анализировать токен доступа, поскольку он предназначен только для использования сервером ресурсов.

Заявка sub зависит от политики IdP и конфигурации клиента.Заявка sub может быть уникальной для приложения (или группы приложений).См. Типы идентификаторов субъекта раздел спецификации.

0 голосов
/ 18 октября 2018

Субъектная (sub) заявка является уникальной для пользователя и службы, для которой предназначен токен (определяется заявкой аудитории (aud)).

Обычно аудитории идентификатора токена и токена доступа различаются: аудитория идентификатора токена - это клиентское приложение, в которое входит пользователь, а аудитория токена доступа - сервер ресурсов, к которому клиентское приложение будет пытаться получить доступ.(от имени вошедшего в систему пользователя).

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