如何避免在 AD B2C 自定义策略 API 连接器中硬编码 ServiceUrl?
How to avoid hardcoding ServiceUrl in AD B2C custom policy API connector?
我的 B2C 自定义策略中有一个 REST API 连接器。我见过的所有示例都在 REST 技术配置文件中对 ServiceUrl
元数据项的值进行了硬编码。例如:
<ClaimsProvider>
<DisplayName>REST APIs</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="REST-MyApiConnector">
<DisplayName>This an example of my API connector</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://someapi.com/api/endpoint</Item>
<Item Key="SendClaimsIn">Url</Item>
<Item Key="AuthenticationType">Basic</Item>
<Item Key="AllowInsecureAuthInProduction">false</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_RestApiUsername" />
<Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_RestApiPassword" />
</CryptographicKeys>
<InputClaims>
</InputClaims>
<OutputClaims>
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
我在 GitHub 问题 (https://github.com/MicrosoftDocs/azure-docs/issues/58267) 上看到了一个片段,发帖人似乎从某些外部设置中提取了 ServiceUrl
:
<Item Key="ServiceUrl">{Settings:CID-ApiUrl}/{user_id}</Item>
我似乎找不到关于此的任何进一步信息。有没有办法在一些外部设置中存储 ServiceUrl
之类的东西,然后可以在自定义策略中访问这些设置,以避免必须对 URL?
进行硬编码
它不是动态的。他们将使用 CICD 管道在上传到租户之前填充它们。
一旦部署到 B2C,就无法动态加载 ServiceUrl。但是有一个非常有用的 VS Code 扩展应该在开发过程中有所帮助。从以下文档转到策略设置部分:Azure AD B2C Tools for VSCode
简而言之,它有助于定义变量,并根据存储在 appsettings.json 文件中的值替换它们。您可以为不同的环境设置多组设置。然后使用单个命令替换所有变量并将最终策略获取到另一个文件夹。
然后您可以将它们部署到您的 b2c 租户。另一种选择是替换 CI/CD 管道中的变量并将它们部署到租户。
我的 B2C 自定义策略中有一个 REST API 连接器。我见过的所有示例都在 REST 技术配置文件中对 ServiceUrl
元数据项的值进行了硬编码。例如:
<ClaimsProvider>
<DisplayName>REST APIs</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="REST-MyApiConnector">
<DisplayName>This an example of my API connector</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://someapi.com/api/endpoint</Item>
<Item Key="SendClaimsIn">Url</Item>
<Item Key="AuthenticationType">Basic</Item>
<Item Key="AllowInsecureAuthInProduction">false</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_RestApiUsername" />
<Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_RestApiPassword" />
</CryptographicKeys>
<InputClaims>
</InputClaims>
<OutputClaims>
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
我在 GitHub 问题 (https://github.com/MicrosoftDocs/azure-docs/issues/58267) 上看到了一个片段,发帖人似乎从某些外部设置中提取了 ServiceUrl
:
<Item Key="ServiceUrl">{Settings:CID-ApiUrl}/{user_id}</Item>
我似乎找不到关于此的任何进一步信息。有没有办法在一些外部设置中存储 ServiceUrl
之类的东西,然后可以在自定义策略中访问这些设置,以避免必须对 URL?
它不是动态的。他们将使用 CICD 管道在上传到租户之前填充它们。
一旦部署到 B2C,就无法动态加载 ServiceUrl。但是有一个非常有用的 VS Code 扩展应该在开发过程中有所帮助。从以下文档转到策略设置部分:Azure AD B2C Tools for VSCode
简而言之,它有助于定义变量,并根据存储在 appsettings.json 文件中的值替换它们。您可以为不同的环境设置多组设置。然后使用单个命令替换所有变量并将最终策略获取到另一个文件夹。
然后您可以将它们部署到您的 b2c 租户。另一种选择是替换 CI/CD 管道中的变量并将它们部署到租户。