Для Azure B2C есть ли способ отправить имя основного пользователя с помощью утверждений?

#c# #azure #blazor #azure-ad-b2c

Вопрос:

У меня возникли некоторые проблемы с получением имени пользователя, вошедшего в систему в данный момент, из Azure b2c в мое веб-приложение Blazor. По сути, я хочу создать учетную запись с именем пользователя, в которой имя пользователя является основным именем пользователя. Первоначально я использовал политику регистрации по электронной почте с отображаемым именем в качестве имени пользователя. Однако b2c не требует, чтобы отображаемые имена были уникальными, поэтому в этом есть неотъемлемая проблема. Ни одно заявление не возвращается с указанием имени пользователя, поэтому в моем приложении Blazor у меня нет возможности следить за тем, кто вошел в систему, или отображать их имя пользователя. Есть несколько вариантов, которые я могу сделать, и мне любопытно, какой из них проще всего реализовать/как его реализовать, потому что последние несколько часов я рвал на себе волосы этим.

  • При создании учетной записи b2c возьмите Основное имя пользователя, а также сделайте его отображаемым именем
  • Попросите, чтобы имя основного пользователя было отправлено через утверждения (не знаю, как это сделать)
  • Регистрируйтесь по электронной почте с отображаемыми именами, но каким-то образом применяйте b2c, чтобы отображаемые имена были уникальными
  • Какой-то другой способ получить уникальное отображаемое имя для пользователей из b2c

Заранее спасибо!

Комментарии:

1. Вы используете локальную учетную запись в b2c ? потоки пользователей / пользовательские политики ? О чем ты говоришь signInNames.userName ? Итак, вам нужно уникальное имя пользователя, совпадающее с отображаемым именем ?

2. На данный момент я использую локальные учетные записи в b2c. В потоке регистрации/входа в систему в разделе локальные учетные записи поставщиков удостоверений вы можете выбрать «Регистрация по электронной почте» или «Регистрация с использованием идентификатора пользователя». Если я выберу Регистрацию по электронной почте, электронная почта будет уникальным идентификатором, однако я хочу, чтобы у моих пользователей были имена пользователей, а не электронные письма. Проблема в том, что если вы используете отображаемое имя, b2c НЕ проверяет, является ли оно уникальным. Идентификатор входа пользователя подходит для моих целей, но в моем веб-приложении Blazor я не могу узнать имя пользователя, так как оно сохраняется как имя основного пользователя, которое можно просматривать в Azure.

3. Но отображаемое имя отличается от имени пользователя. вам нужно отображаемое имя ? вы могли бы просто придерживаться имени пользователя, и все должно быть в порядке

4. Имя пользователя в порядке, но у меня нет возможности получить эту информацию в Blazor. B2C отправляет только электронную почту и отображаемое имя в качестве утверждений, которые я могу проверить. Насколько я могу судить, нет вызова функции для получения имени основного пользователя.

5. вы должны быть в состоянии настроить требования, возвращаемые из b2c tho

Ответ №1:

Вам необходимо использовать пользовательские политики: https://aka.ms/ief. Имя пользователя не возвращается в токене с потоками пользователей.

Используя пользовательские политики, вы можете зарегистрировать пользователя, используя имя пользователя, и вернуть его имя пользователя (атрибут signInNames.username, отображаемый как имя пользователя на портале Azure) в токен.

Вы можете быстро развернуть пользовательские политики, используя мой инструмент здесь. И быстро разверните образец имени пользователя, используя эту страницу с именем папки с образцом username-signup-or-signin .

Комментарии:

1. Фантастический инструмент, Он действительно очень помог! Теперь я вижу, что имя входа возвращается в качестве требования для пользовательской политики username SUSI. Мне все еще нужно внести некоторые изменения в пользовательскую политику, но спасибо, что помогли мне на 95% выполнить ее.

Ответ №2:

Если вам нужна какая-либо дополнительная заявка, которую вам необходимо ввести в своем клиенте Azure AD BC и настроить заявки приложений из потока пользователей, в следующем примере поток пользователей называется B2C_1_signupsignin:

Претензии по заявкам

В приведенном выше примере, как вы можете видеть, перечислены все другие доступные утверждения, поскольку утверждения dome всегда возвращаются в качестве имени пользователя.

Вы можете настроить утверждение (режим), используемое для входа в систему поставщика удостоверений:
Конфигурация поставщика идентификационных данных

Чем претензии, которые вы получаете, являются следующие:

Список претензий

Но, как вы можете видеть, нет никакого userPrincipalName или signinNames .
Это известная проблема в Azure AD B2C, и включение этих утверждений в манифест потока пользователей не работает.
Единственное решение, которое я нашел, — это загрузить вашу пользовательскую политику и добавить:
<OutputClaim ClaimTypeReferenceId = "signInName" />

но это работает только для локальных учетных записей.
если вы хотите добавить имена для входа также для внешних (социальных) учетных записей, вам нужно сопоставить их, например:
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="upn" />

посмотрите на базовый исходный XML здесь:
https://github.com/azure-ad-b2c/samples/tree/master/policies/sign-up-with-social-and-local-account

Комментарии:

1. Спасибо, это определенно было в правильном направлении. Инструмент, который опубликовал Джас Сури, действительно помогает начать работу с пользовательскими политиками.