Я исследую возможности Azure AD B2C. У меня есть следующий вариант использования:

У меня есть приложение Xamarin Forms. В текущем приложении пользователь может выбрать три разные среды (A, B, C) при входе в систему. Каждая среда имеет отдельный, но похожий веб-сайт, воспринимайте его как промежуточные среды. Таким образом, выбор среды определяет, на каком веб-сайте происходит фактический вход в систему. Например, пользователь должен иметь возможность выйти из A, а затем снова войти в систему в B.

Теперь я хочу, чтобы вместо этого выполнялась аутентификация в Azure AD B2C. Я настраиваю клиента и создаю настраиваемую политику для вызова веб-сайта для отдыха, чтобы выполнить дополнительные шаги проверки с помощью objectid на последнем этапе оркестрации. Этот механизм работает нормально.

Проблема в том, что REST-вызовы serviceurl немного отличаются для сред A, B или C. В оркестровке, я думаю, должно быть возможно сделать три отдельных шага REST и сделать их условными для какого-то параметра. Вопрос в том, какой параметр. Индивидуальная претензия?

Приложение Xamarin использует msal для подключения к клиенту.

Какой механизм я могу использовать из приложения, чтобы узнать в настраиваемой политике, что вход в систему предназначен для среды A, B или C?

  • Может это какой-то параметр?
  • Или мне следует сделать три разных определения приложений в B2C и использовать ApplicationId для различения?
0
Ed S 13 Фев 2021 в 12:07

1 ответ

Лучший ответ

Следуя комментарию Джаса, я добавил в приложение WithExtraQueryParameters:

await App.AuthenticationClient
.AcquireTokenInteractive(scopes: Constants.Scopes)
.WithExtraQueryParameters(new Dictionary<string, string> { { "website_code", "TEST" } })
.WithPrompt(Prompt.ForceLogin)
.WithParentActivityOrWindow(App.UIParent)
.ExecuteAsync();

Некоторые ключевые фрагменты из TrustframeworkExtensions.xml:

<ClaimType Id="website_code">
  <DisplayName>Website code</DisplayName>
  <DataType>string</DataType>
  <UserHelpText>The Website code</UserHelpText>
</ClaimType>

<InputClaim ClaimTypeReferenceId="website_code" DefaultValue="{OAUTH-KV:website_code}" AlwaysUseDefaultValue="true" />

<OrchestrationStep Order="7" Type="ClaimsExchange">
    <Preconditions>
        <Precondition Type="ClaimEquals" ExecuteActionsIf="false">
             <Value>website_code</Value>
             <Value>TEST</Value>
             <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
    </Preconditions>
 <ClaimsExchanges>
   <ClaimsExchange Id="RESTGetUserClaims_test" TechnicalProfileReferenceId="xxxx_test" />
   </ClaimsExchanges>
</OrchestrationStep>
0
Ed S 15 Фев 2021 в 21:31