В дополнение к обычному созданию учетной записи на основе того, не существует ли используемая электронная почта в настоящее время, я хотел бы знать, как я могу также проверить, не существует ли другое значение утверждения в Azure Active Directory.
Например, для нашего приложения любой, кто создает учетную запись, должен указать название организации. После регистрации они становятся владельцем своей организационной группы.
Перед созданием учетной записи я хочу проверить, не связано ли имя организации с какой-либо другой учетной записью (мы собираемся выполнить регистрацию по приглашению, если владелец хочет добавить людей в свою организацию). Если его не существует, создайте учетную запись. В противном случае я хочу выдать ошибку и предотвратить создание учетной записи.
Изучив документацию по техническим профилям Azure B2C, я подумал, что лучшим вариантом будет изменение AAD-UserWriteUsingLogonEmail
.
Пока я пробовал два подхода. Первый подход заключался в включении входного утверждения для названия организации. Однако это просто замораживает поток теста:
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
<Metadata>
<Item Key="Operation">Write</Item>
<Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
</Metadata>
<IncludeInSso>false</IncludeInSso>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true" />
<InputClaim ClaimTypeReferenceId="extension_organizationName" Required="true" />
</InputClaims>
<PersistedClaims>
<!-- Required claims -->
<PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
<PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
<PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
<PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration" />
<!-- Optional claims. -->
<PersistedClaim ClaimTypeReferenceId="givenName" />
<PersistedClaim ClaimTypeReferenceId="surname" />
<PersistedClaim ClaimTypeReferenceId="extension_organizationName" />
</PersistedClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" />
<OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
<OutputClaim ClaimTypeReferenceId="userPrincipalName" />
<OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
</OutputClaims>
<IncludeTechnicalProfile ReferenceId="AAD-Common" />
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
Второй подход был чем-то похожим, но вместо этого использовался <InputClaimsTransformations>
, чтобы проверить, существует ли название организации, с помощью действия DoesClaimExist. При использовании этого подхода я получаю следующую ошибку:
Невозможно проверить предоставленную информацию.
Поскольку я новичок в создании пользовательских политик, правильно ли меняю профиль AAD-UserWriteUsingLogonEmail
или мне нужен совершенно другой подход?
РЕДАКТИРОВАТЬ:
После перехода по ссылкам Барбары я смог заставить валидацию работать. Однако у меня все еще возникают проблемы с попыткой предотвратить учетную запись, использующую организацию, которая уже связана с другой учетной записью. Кажется, что использование <InputClaimsTransformations>
ничего не дает.