如何避免在 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 管道中的变量并将它们部署到租户。