Регистрация Azure AD B2C без входа пользователя
Я настроил Azure AD B2C, чтобы разрешить аутентификацию пользователей из "обычного" каталога AAD с использованием пользовательских политик, как описано здесь https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-aad-custom. В одном сценарии я хочу, чтобы пользователь выполнил регистрацию (аутентифицировался с использованием своих кредитов AAD, создал соответствующий объект в каталоге AAD B2C и передал objectidentifier как претензию на мое приложение) без предоставления какой-либо дополнительной информации. Исходя из примеров, я не могу понять, как полностью пропустить шаг самоутверждения. Я попробовал два подхода:
1) удаление SelfAsserted-Social ClaimsExchange и 2) изменение (собственно, копирование в TrustFrameworkExtensions, переименование и редактирование) SelfAsserted-Social и AAD-UserReadUsingObjectId ClaimsExchanges так, что единственными записями OutputClaim являются те, которые не требуют запроса пользователя.
В обоих подходах с точки зрения пользовательского интерфейса регистрация работает, но в каталоге B2C пользовательский объект не создается. Используя App Insights, в обоих подходах AAD-UserReadUsingObjectId, по- видимому, генерирует исключение Microsoft.Cpim.Common.PolicyException.
Полное путешествие пользователя
<UserJourney Id="SignUpAAD">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
<ClaimsProviderSelection TargetClaimsExchangeId="KDEWEbAppTestExchange" />
</ClaimsProviderSelections>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="KDEWebAppTestExchange" TechnicalProfileReferenceId="KDEWebAppTestProfile" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- prepare ground for searching for user -->
<OrchestrationStep Order="4" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="SelfAsserted-Social-Silent" TechnicalProfileReferenceId="SelfAsserted-Social-Silent" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- This step reads any user attributes that we may not have received when authenticating using ESTS so they can be sent
in the token. -->
<OrchestrationStep Order="5" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectIdLimited" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- create the user in the directory if one does not already exist
(verified using objectId which would be set from the last step if account was created in the directory. -->
<OrchestrationStep Order="6" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserWrite" TechnicalProfileReferenceId="AAD-UserWriteUsingAlternativeSecurityId" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
Есть идеи?
Спасибо
Мартин
1 ответ
Необходимо заменить шаг 4 оркестрации следующим шагом оркестровки:
<OrchestrationStep Order="4" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AAD-UserWriteUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserWriteUsingAlternativeSecurityId" />
</ClaimsExchanges>
</OrchestrationStep>
На этом шаге оркестрации создается пользовательский объект, если пользовательский объект не был получен на шаге 3 оркестровки (т. Е. Утверждение objectId не существует).