Отображение идентификатора SAML для пользователя в моей собственной базе данных на PHP - PullRequest
0 голосов
/ 01 июня 2019

В настоящее время у меня есть приложение PHP (Laravel), которое имеет собственное управление пользователями и аутентификацию. Я пытаюсь реализовать единый вход в ADFS (Active Directory Federated Services).

Я установил каталогв Azure, и я добавил новое «Приложение» к нему.Azure предоставляет примеры того, как проходить аутентификацию с использованием javascript, Android и iOS, поэтому я скачал образец кода javascript и все заработало.Клиент / браузер получает токен доступа, но как мне определить пользователя в моем бэкэнд-коде (PHP)?

Мне нужно взять идентификатор пользователя AD и сопоставить его с локальным пользователем в моей собственной базе данных, а затем выдать новый токен доступа на основе этого пользователя в моем собственном приложении, чтобы я мог использовать всю свою существующую логику авторизации.

Однако я не уверен, что это лучший способ добиться этого.Моя текущая идея состоит в том, чтобы взять токен доступа, полученный из javascript в браузере, передать его бэкэнду, а затем бэкэнд-сервер вызовет Microsoft API (например, https://graph.microsoft.com/v1.0/me/), чтобы получить уникальный идентификатор для пользователя, который я могузатем сопоставьте с моей собственной базой данных и выдайте свой собственный токен доступа. Это рекомендуемый подход? Какие еще существуют альтернативы?

1 Ответ

0 голосов
/ 02 июня 2019

Когда пользователь проходит аутентификацию в приложении через Azure AD, используя протокол SAML 2.0, Azure AD отправляет маркер в приложение (через HTTP POST).Затем приложение проверяет и использует токен для входа пользователя в систему вместо запроса имени пользователя и пароля.Эти токены SAML содержат фрагменты информации о пользователе, известной как утверждения.

Заявка - это информация, которую провайдер идентификации сообщает о пользователе внутри токена, который он выдает для этого пользователя.В токене SAML эти данные обычно содержатся в утверждении атрибута SAML.Уникальный идентификатор пользователя обычно представлен в теме SAML, также называемой идентификатором имени.

По умолчанию Azure AD выдает в приложение маркер SAML , содержащий утверждение NameIdentifier со значениемимя пользователя пользователя (также называемое именем участника-пользователя) в Azure AD, которое может однозначно идентифицировать пользователя.Маркер SAML также содержит дополнительные утверждения, содержащие адрес электронной почты, имя и фамилию пользователя.

Чтобы просмотреть или изменить утверждения, выданные в приложении токеном SAML, откройте приложение на портале Azure.Затем откройте раздел «Атрибуты и утверждения пользователя».

enter image description here

Если запрос SAML содержит элемент NameIDPolicy с определенным форматом, Azure AD будет учитывать форматв запросе.

Если запрос SAML не содержит элемента для NameIDPolicy, то Azure AD выдаст NameID в указанном вами формате.Если формат не указан, Azure AD будет использовать исходный формат по умолчанию, связанный с выбранным источником заявки.

enter image description here

Подробнее о сопоставлении заявок можно прочитать здесь:

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-claims-mapping#table-3-valid-id-values-per-source

В двух словах, вы можете отправить токен SAML в бэкэнд-приложение и использовать ответ SAML для извлечения NameIdentifier и сопоставления его с вашей базой данных.

Hopeэто помогает.

...