#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. Спасибо, это определенно было в правильном направлении. Инструмент, который опубликовал Джас Сури, действительно помогает начать работу с пользовательскими политиками.