azure-ad-b2c - 从 Azure B2C 自定义策略调用安全 REST API 以嵌入声明
问题描述
我正在尝试通过创建自定义策略来使用 Azure B2C 安全 API 作为用户旅程的一部分。我创建了一个声明提供程序来获取一个不记名令牌,如下所示
<ClaimsProvider>
<DisplayName>REST APIs</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SecureREST-AccessToken">
<DisplayName></DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://***.b2clogin.com/***.onmicrosoft.com/B2C_1A_SignUpOrSignIn/oauth2/v2.0/authorize</Item>
<Item Key="AuthenticationType">Basic</Item>
<Item Key="SendClaimsIn">Form</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_SecureRESTClientId" />
<Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_SecureRESTClientSecret" />
</CryptographicKeys>
<InputClaims>
<InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="client_credentials" />
<InputClaim ClaimTypeReferenceId="scope" DefaultValue="https://***.onmicrosoft.com/profileapi/profileapi-scope" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="bearerToken" PartnerClaimType="access_token" />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
另一个索赔提供商调用我的安全 REST API,如下所示
<ClaimsProvider>
<DisplayName>REST APIs</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="AzureFunctions-GetRole">
<DisplayName>Get Roles </DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://***.azurewebsites.net/api/UserProfiles/CheckAdminUser</Item>
<Item Key="AuthenticationType">Bearer</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="AllowInsecureAuthInProduction">false</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
<InputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" />
<InputClaim ClaimTypeReferenceId="bearerToken"/>
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="IsAdminUser" PartnerClaimType="IsAdminUser" />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
我怎么把这两个绑起来?这些应该是用户旅程中的两个步骤吗?
解决方案
AAD B2C 端点不支持客户端凭据流。您获取令牌的初始调用应模拟 AAD 客户端凭据流: https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow
如果它们不会向用户返回错误的可能性,您将从用户旅程中调用这些技术配置文件。或者以其他方式作为从自我断言的技术配置文件中引用的验证技术配置文件。
推荐阅读
- java - Android Studio凌空嵌套jsonarray
- gradle - ClassNotFoundException 使用 localstack 和 aws sdk v2 withs3
- python - 使用中间件将重定向的 URL 替换为原始 URL 后无法以正确的方式发送请求
- libvirt - 找不到 libvirtd.service
- c - 微处理器和微控制器编译差异
- pytorch - Heroku 上的“没有名为 torch 的模块”
- reactjs - 反应输入 onChange 滞后(许多文本字段)
- flutter - 将 Flutter App 中的直接消息 (DM) 分享到 Messenger 和 Instagram
- powershell - 无法删除空文件夹(拒绝访问云文件)
- spring-boot - 出于安全原因,升级 netty 及其组件的正确方法是什么?