#azure #authentication #azure-ad-b2c #azure-ad-b2c-custom-policy
#azure #аутентификация #azure-ad-b2c #azure-ad-b2c-custom-policy
Вопрос:
ОБНОВЛЕНИЕ: я наконец-то могу получить свою пользовательскую страницу ошибок для рендеринга. Я должен был использовать <div id="api"></div>
, на мой взгляд.
Моя последняя забота здесь, которая кажется невозможной, — это добавление значения одного из моих утверждений (из idToken, переданного моей политике B2C, когда я ее вызываю) в LoadUri моего contentdefinition.
Вот мои технические профили:
<TechnicalProfile Id="SelfAsserted-SigningNotReadyError">
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GetUser" />
</InputClaimsTransformations>
<IncludeTechnicalProfile ReferenceId="SelfAsserted-UserError" />
</TechnicalProfile>
<TechnicalProfile Id="SelfAsserted-UserError">
<DisplayName>Unsolicited error message</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ContentDefinitionReferenceId">api.signingerrorlink</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="errorMessage" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="errorMessage" />
</OutputClaims>
</TechnicalProfile>
и мое определение содержания
Примечание: посмотрите, как я должен жестко кодировать идентификатор GUID. 🙁
signingerror?user=7ec00437-1ad9-4acc-a285-a729003ca99d
<ContentDefinition Id="api.signingerrorlink">
<LoadUri>https://something.azurewebsites.net/signingerror?user=7ec00437-1ad9-4acc-a285-a729003ca99d</LoadUri>
<RecoveryUri>https://something.azurewebsites.net/error</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.2.0</DataUri>
<Metadata>
<Item Key="DisplayName">Signing Not Ready</Item>
</Metadata>
</ContentDefinition>
ОРИГИНАЛ:
Я здесь в затруднительном положении. Я просматривал много сообщений в stackoverflow и в Интернете в целом. Я надеюсь, что вы сможете мне помочь.
У меня есть пользовательская политика B2C, которая в основном принимает токен, выполняет некоторые функции, а затем возвращает токен доступа в конце. Это работает нормально. Моя проблема заключается в том, что мне нужно определить шаг, который вызовет технический профиль на основе предварительного условия. Предварительное условие на самом деле хорошо работает.
Чего мне не хватает, так это способа создания technicalprofile / contentdefinition для загрузки моей собственной страницы ошибок (контроллер .Net Core 3) в другой проект, но полностью доступный (контроллеры / SigningErrorController).
Мой шаг:
<OrchestrationStep Order="7" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>isReadyForSigning</Value>
<Value>True</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="SelfAsserted-SigningNotReady" TechnicalProfileReferenceId="SelfAsserted-SigningNotReadyError" />
</ClaimsExchanges>
</OrchestrationStep>
Часть 2! Мне нужно передать значение на эту пользовательскую страницу ошибок. Идентификатор guid в данном случае.
Если я использую TP для invalidlink, это сработает. Я пробовал различные пользовательские определения содержимого, похожие на:
<ContentDefinition Id="api.signingerrorlink">
<LoadUri>https://something.azurewebsites.net/error</LoadUri>
<RecoveryUri>https://something.azurewebsites.net/signingerror</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:globalexception:1.1.0</DataUri>
<Metadata>
<Item Key="DisplayName">Error page</Item>
</Metadata>
</ContentDefinition>
… с ошибкой подписи, являющейся пользовательской страницей ошибок, на которую я хочу перейти.
Если я запускаю это, политика просто полностью пропускает этот шаг. Если я использую недопустимую ссылку TP, тогда она работает. Я также попытался выяснить, как передать значение на страницу ошибок. Я в недоумении, ребята.
Мы будем признательны за любую помощь, которую вы можете оказать.
Комментарии:
1. Я пробовал что-то подобное, что, как я надеялся, приведет к значению утверждения ‘packageUserId’ и передаст его для ‘user’, оно просто заканчивается как ‘?user = packageUserId’, и это влияет на каждое определение содержимого. Я также пробовал {packageUserId} и варианты. « <Поведение пользователя> … <ContentDefinitionParameters> <Имя параметра=»user»>{OAUTH-KV:packageUserId}</Parameter> </ContentDefinitionParameters> </UserJourneyBehaviors> «
Ответ №1:
Вы можете использовать распознаватель утверждений в элементе LoadUri. Например.:
<ContentDefinition Id="api.signingerrorlink">
<LoadUri>https://something.azurewebsites.net/signingerror?user={Claim:packageUserId}</LoadUri>
<RecoveryUri>https://something.azurewebsites.net/error</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:1.2.0</DataUri>
<Metadata>
<Item Key="DisplayName">Signing Not Ready</Item>
</Metadata>
</ContentDefinition>