AAD B2C - согласие пользователя не запрашивается

Контекст:

  • Azure AD B2C для клиента
  • Настроен внешний поставщик удостоверений
  • Настроен процесс входа в систему B2C (вход в систему)
  • API backend defined as Application with 2 scopes in AAD B2C of this Tenant
    • "Admins and users" can consent
  • Внешний клиент / Стороннее приложение (конфиденциально), определенное как Приложение в AAD B2C этого Арендатора
  • External client/Third Party app has permissions on the 2 scopes
    • Status is "nothing", I did not grant admin consent, I want the users to give consent themselves
  • In Enterprise applications | User settings
    • Users can consent to apps accessing company data on their behalf: YES
  • С согласия и разрешений | Настройки согласия пользователя = ›Разрешить согласие пользователя для приложений. Все пользователи могут разрешить любому приложению доступ к данным организации.

URL авторизации:

https://xxx.b2clogin.com/xxx.onmicrosoft.com/oauth2/v2.0/authorize
?p=B2C_1_signup_login
&client_id=xxx
&nonce=defaultNonce
&redirect_uri=xxx
&scope=offline_access%20openid%20profile%20email%20https%3A%2F%xxx.onmicrosoft.com%2F6D6E9DF9-4546-47D8-8EDB-D65EC89A0E90%2Fproduct_scope_2
&response_type=code
&code_challenge=ThisIsntRandomButItNeedsToBe43CharactersLong
&code_challenge_method=plain

Пользователь перенаправляется к внешнему провайдеру IDP, входит в систему. Согласие пользователя не запрашивается. URL-адрес обратного вызова вызывается с code, который можно обменять на id_token. Аудитория (aud) - это client_id клиентского приложения, а не API.

Если я даю согласие администратора, code можно обменять на access_token и id_token, и аудитория будет в порядке (API client_id).

Что я должен настроить, чтобы пользователи просили дать согласие для клиентского приложения + области? Мне не удалось найти ни одной статьи об этом: согласие пользователя И внешний поставщик удостоверений.


person Francois    schedule 21.03.2021    source источник


Ответы (1)


Вы должны получить согласие администратора в AAD B2C. У него нет запроса на согласие OAuth2.0 для пользователей. Вместо этого он смоделирован с условиями использования. Вы никогда не дадите согласие Oauth, если не поделитесь своими данными с третьей стороной.

https://github.com/azure-ad-b2c/samples/blob/master/policies/terms-of-service

С согласия и разрешений | Настройки согласия пользователя = ›Разрешить согласие пользователя для приложений. Все пользователи могут разрешить любому приложению доступ к данным организации.

Не имеет отношения к приложениям AAD B2C.

Если вам все еще нужен UX согласия: https://github.com/azure-ad-b2c/samples/tree/master/policies/service-consent

person Jas Suri - MSFT    schedule 21.03.2021
comment
Спасибо JasSuri за ваш ответ. Просто: Irrelevant to AAD B2C apps означает, что сторонние приложения (внешний клиент в начальном описании) не должны управляться таким образом, или неуместны, потому что они смоделированы с помощью TOS, а решение заключается в реализации некоторого UX (политики с Trust Framework)? - person Francois; 23.03.2021
comment
Неактуально, потому что это просто не относится к Регистрации приложений B2C, пользователи делятся данными с вами, это первая сторона. Подумайте о любом веб-сайте / приложении, на которое вы подписались. Согласие oauth моделируется, когда вы просите пользователя передать данные из службы (которая вам не принадлежит) в ваше приложение. Например, вход через Google в ваше приложение B2C вызовет согласие в Google. Независимо от того, будет ли это полезно или применимо в ваших приложениях, ориентированных на потребителя, на самом деле я не знаю ни одного стандарта. И да, вы можете смоделировать этот UX с помощью Identity Experience Framework, если хотите. - person Jas Suri - MSFT; 23.03.2021
comment
Итак, в контексте, который я описал (только POC), третья сторона не принадлежит мне, а зарегистрирована как приложения B2C, чтобы воспользоваться возможностями сервера AAD OAuth2 (+ вы можете подключить внешнего поставщика удостоверений). Когда я читаю ваши комментарии, это кажется мне крайним случаем или взломом. Спасибо, Джас. - person Francois; 23.03.2021