Токен доступа также каким-то образом «аутентифицируется»?
Да. Ваш API проверяет токен доступа при его получении. Это часть аутентификации, когда ваш API проверяет, что подпись токена действительна, получена от клиента Azure AD, которому вы доверяете, что он предназначен для вашего API и срок его действия не истек. авторизация - это когда вы проверяете, какие разрешения содержит токен. Ваш API может определять различные разрешения, которые предоставляются клиентским приложениям, обеспечивая им разные уровни доступа. Действительный токен может пройти аутентификацию, но он может не пройти авторизацию, если у него нет необходимых разрешений.
Правильно ли я поступаю здесь? Или это нужно сделать по-другому.
По сути, вы делаете правильные вещи. Маркер сообщает вам, кто пользователь, который использует клиентское приложение, и если вам нужно знать, кто именно что-то сделал, это информация, которую вы используете. Однако, если вы действительно хотите связать действие с пользователем, я предлагаю вам использовать его идентификатор объекта / идентификатор объекта / oid вместо его имени / имени пользователя, поскольку они могут измениться. Если только вам не нужно их отображаемое имя.
Должны ли токены доступа когда-либо содержать информацию о пользователе?
В контексте Azure AD токен доступа всегда будет содержат информацию о пользователе, если клиентское приложение обращается к API от имени пользователя. Это включает в себя потоки аутентификации, такие как код авторизации, код устройства, неявный и от имени. Все они используют делегированные разрешения, также называемые областями, для вызова API от имени пользователя. Таким образом, токен содержит информацию о вызывающем приложении и пользователе.
Если приложение получает токен доступа с использованием потока учетных данных клиента, в котором пользователь не участвует, в токене не будет информации о пользователе. В этом случае разрешения приложений используются вместо делегированных разрешений в Azure AD. Приложение действует как само себя, а не от имени какого-либо пользователя.
Если ваш API поддерживает оба этих сценария ios, иногда токены содержат информацию о пользователе, а иногда нет.
Часть о форматы токенов в основном верны с точки зрения спецификации. OAuth не определяет строгий формат для токенов доступа, в то время как OpenID Connect определяет его для токенов ID.
Использование токена доступа для вызова вашего API определенно правильно. Маркер ID предназначен только для приложения, которое инициировало аутентификацию пользователя, а не для каких-либо API-интерфейсов, которые оно вызывает. Вот для чего нужны токены доступа.