Azure AD B2C:如何根据来自消费应用程序的值区分被调用 REST API 的 serviceUrl
Azure AD B2C: How to differentiate the serviceUrl of a called REST API based on a value from the consuming app
我正在研究 Azure AD B2C 的可能性。我有以下用例:
我有一个 Xamarin Forms 应用程序。在当前的应用程序中,用户可以在登录时选择三个不同的环境(A、B、C)。每个环境都有一个独立但相似的网站,可以将其视为暂存环境。因此,环境的选择决定了实际登录发生在哪个网站。例如,用户应该能够注销 A,然后在 B 中再次登录。
现在我希望 Azure AD B2C 改为处理身份验证。我设置了一个租户并创建了一个自定义策略来对网站进行休息调用,以在最后一个编排步骤中使用 objectid 执行额外的验证步骤。该机制运行良好。
问题是对 serviceurl 的 REST 调用对于 C 的环境 A、B 略有不同。
在编排中,我想应该可以制作三个独立的 REST 步骤,并使它们以某个参数为条件。问题是哪个参数。自定义声明?
Xamarin 应用程序使用 msal 连接到租户。
我可以使用应用程序中的什么机制来了解自定义策略中的登录是针对环境 A、B 还是 C?
- 可以是一些参数吗?
- 还是在B2C中定义三个不同的Application,用ApplicationId来区分?
根据 Jas 的评论,我将 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>
我正在研究 Azure AD B2C 的可能性。我有以下用例:
我有一个 Xamarin Forms 应用程序。在当前的应用程序中,用户可以在登录时选择三个不同的环境(A、B、C)。每个环境都有一个独立但相似的网站,可以将其视为暂存环境。因此,环境的选择决定了实际登录发生在哪个网站。例如,用户应该能够注销 A,然后在 B 中再次登录。
现在我希望 Azure AD B2C 改为处理身份验证。我设置了一个租户并创建了一个自定义策略来对网站进行休息调用,以在最后一个编排步骤中使用 objectid 执行额外的验证步骤。该机制运行良好。
问题是对 serviceurl 的 REST 调用对于 C 的环境 A、B 略有不同。 在编排中,我想应该可以制作三个独立的 REST 步骤,并使它们以某个参数为条件。问题是哪个参数。自定义声明?
Xamarin 应用程序使用 msal 连接到租户。
我可以使用应用程序中的什么机制来了解自定义策略中的登录是针对环境 A、B 还是 C?
- 可以是一些参数吗?
- 还是在B2C中定义三个不同的Application,用ApplicationId来区分?
根据 Jas 的评论,我将 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>