Как получить доступ к электронной почте пользователя на B2C с помощью Graph API - PullRequest
1 голос
/ 11 октября 2019

Я хочу знать адрес электронной почты пользователя для отправки электронного письма. В моем приложении люди могут зарегистрироваться с помощью социальных учетных записей (Google / Facebook / Microsoft) или локальных учетных записей. При создании локальной учетной записи мы используем электронную почту.

Я нашел эту информацию о том, как хранится электронная почта. https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-reference-policies

Хранение адреса электронной почты : Адрес электронной почты может потребоваться как часть потока пользователя. Если пользователь проходит проверку подлинности с поставщиком социальной идентификации, адрес электронной почты сохраняется в свойстве otherMails. Если локальная учетная запись основана на имени пользователя, то адрес электронной почты хранится в свойстве детализации строгой аутентификации. Если локальная учетная запись основана на адресе электронной почты, тогда адрес электронной почты сохраняется в свойстве signInNames. Адрес электронной почты не гарантируется в любом из этих случаев. Администратор клиента может отключить проверку электронной почты в основных политиках для локальных учетных записей. Даже если проверка адреса электронной почты включена, адреса не проверяются, если они получены от поставщика социальных идентификаторов, и они не были изменены. Только другие свойстваMails и signInNames предоставляются через API-интерфейс Graph Active Directory. Адрес электронной почты в свойстве детализации строгой аутентификации недоступен

Не уверен, почему поле «Почта» для пользователя не используется ... но используется GraphApi:

Iсделать GET: https://graph.microsoft.com/v1.0/Users?$select=displayName,mail,otherMails,signInNames

Некоторые электронные письма появляются в «mail», другие в массиве «otherMails», и «singInNames» не может быть выбран :( не показывает никакой информации, поэтомунекоторые пользователи, которым я не могу получить информацию об электронной почте.

Как я могу решить эту проблему? Только с помощью Azure AD Graph вместо Microsoft Graph API , посколькув этом API возвращаются signInNames?

Нет ли способа хранить электронные письма всегда в одном и том же свойстве? Или хотя бы в одном из них, к которому у меня есть доступ в Microsoft Graph API? Использование пользовательских политик только с преобразованием утверждений?

1 Ответ

0 голосов
/ 31 октября 2019

Вам необходимо собирать адреса электронной почты из разных мест, таких как mail , otherMails и signInNames через API Graph API. signInNames - это НЕ , доступный в Microsoft Graph API.

Обратите внимание, что в случае, когда пользователи входят в систему с именем пользователя + проверка электронной почты, нет способа получить электронную почтуused.

Или вы можете добавить пользовательский атрибут в пользовательскую политику , где вы можете потребовать, чтобы пользователи вводили свой адрес электронной почты. После этого вы можете использовать AD Graph для получения пользовательского атрибута ( Пример здесь ).

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