Доступ к данным пользователя из Azure B2C AD с помощью OAuth 2.0 - PullRequest
2 голосов
/ 27 марта 2019

Мы хотим аутентифицировать пользователей нашего веб-приложения с помощью OAuth 2.0 через Azure B2C AD.Пользователи, управляющие B2C AD, будут поступать из разных источников, некоторые из которых мы создадим сами, но большинство подпишутся сами, и мы хотим включить других провайдеров идентификации, таких как Github или Google, следовательно, Azure B2C AD вместо Azure Active Directory.Мы также хотим объединить этих пользователей (включая некоторых самоподписавшихся) в группы.

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

Мы инициируем аутентификацию пользователя на https://<tenant>.b2clogin.com/tfp/<tenant>.onmicrosoft.com/<user-flow>/oauth2/v2.0/authorize?client_id=<client-id>&redirect_uri=<redirect-uri>&scope=<client-id>&response_type=code

.пользователь возвращается с действительным кодом авторизации, и мы используем его для запроса токена доступа у https://<tenant>.b2clogin.com/tfp/<tenant>.onmicrosoft.com/<user-flow>/oauth2/v2.0/token, используя следующие данные POST:

{
    "code":"<authorization-code>",
    "client_id":"<client-id>",
    "client_secret":"<client-secret>",
    "redirect_uri":"<redirect-uri>",
    "grant_type":"authorization_code"
}

Затем мы хотим использовать этот токен доступа для получения данных профиля пользователя (включая имя пользователя, адрес электронной почты и членство в группах) из API-интерфейса Azure AD Graph (https://graph.windows.net//me?api-version=1.6).) В документах прямо говорится, что каталоги B2C не должны использовать новый API-интерфейс Microsoft Graph https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

API отвечает, что токенсрок действия истек:

<?xml version="1.0" encoding="utf-8"?><error
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code>Authentication_ExpiredToken</code><message
xml:lang="en">Your access token has expired. Please renew it before
submitting the request.</message></error>

Но отметка времени в токене, декодированном https://jwt.ms/, говорит иначе:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "iss": "https://<tenant>.b2clogin.com/<id>/v2.0/",
  "exp": 1553689573,
  "nbf": 1553685973,
  "aud": "<client-id>",
  "idp": "github.com",
  "name": "<username>",
  "oid": "<oid>",
  "sub": "<sub>",
  "emails": [
    "<email>"
  ],
  "tfp": "B2C_1_SignupAndSignin",
  "azp": "<client-id>",
  "ver": "1.0",
  "iat": 1553685973
}.[Signature]

However, aud в токене - только наше приложение, а не API-интерфейс Azure AD Graph.Это говорит о том, что токен, выпущенный Azure B2C AD, просто недопустим для API Graph.

Поэтому мы задаемся вопросом, как правильно:

  • получить токен доступадля пользователя B2C AD, который позволит нам получать информацию о пользователе
  • читать профиль и членство в группах для аутентифицированного пользователя AD B2C

Некоторые ответы на Secure API с Azure AD/ B2C пользователи предлагают создать второе приложение для запроса Graph API.Это единственный способ достичь наших целей?

1 Ответ

0 голосов
/ 27 марта 2019

Не думаю, что вы сможете использовать токен B2C для доступа к API-интерфейсу Azure AD Graph.

Вы можете использовать токен B2C для доступа к ресурсу, защищенному с помощью B2C, например функция Azure или ваше приложение.

В этом случае, я думаю, вам понадобится использовать служебную учетную запись для подключения к Azure AD Graph API от имени вашего пользователя. Ваше приложение на стороне сервера должно будет реализовать управление доступом на основе ролей, например только получение информации о текущем пользователе. Вы можете использовать токен B2C ( после его проверки ) в своем приложении, чтобы узнать, кто является текущим пользователем.

Azure AD B2C: используйте API-интерфейс Azure AD Graph

Для арендаторов B2C существует два основных способа общения с График API.

  • Для интерактивных задач, выполняемых один раз, при выполнении задач вы должны действовать как учетная запись администратора в клиенте B2C. Этот режим требует администратора для входа с учетными данными перед этим Администратор может выполнять любые вызовы Graph API.
  • Для автоматизированных непрерывных задач вы должны использовать служебную учетную запись определенного типа , которую вы предоставляете с необходимыми привилегиями для выполнения задачи управления. В Azure AD вы можете сделать это, зарегистрировав приложения и аутентификации в Azure AD. Это делается с помощью Идентификатор приложения, который использует грант клиента OAuth 2.0. В в этом случае приложение действует как сам, а не как пользователь, чтобы вызвать График API.
...