【问题标题】:Get the Azure AD B2C Application client id in the custom policy在自定义策略中获取 Azure AD B2C 应用程序客户端 ID
【发布时间】:2017-09-26 20:51:26
【问题描述】:

您好,使用 B2C 应用程序的客户端 ID 调用自定义策略

https://login.microsoftonline.com/TENANT/oauth2/v2.0/authorize?p=B2C_1A_POLICY&client_id=THE-CLIENT-ID-I-WANT

如何在策略中访问它,我认为这将被硬编码到 client_id 声明中,但我不认为是

它仅作为 aud 声明的默认值返回,但我在自定义策略中也没有看到

谢谢

【问题讨论】:

  • 嘿,您似乎可以使用 {OIDC:ClientId} 将声明抓取到输入声明中,如果我可以坚持此声明,则需要进行更多调查任何人都知道其他{存在的变量}或我可以在哪里查找完整列表

标签: azure-ad-b2c


【解决方案1】:

好的,它有点解决方法,但我尝试使用标准的 UserJourneyContextProvider 技术配置文件,但这没有用

为了获得客户 ID 作为声明,我做了以下操作

创建编排步骤

<OrchestrationStep Order="2" Type="ClaimsExchange">
  <ClaimsExchanges>
   <ClaimsExchange 
       Id="ClientIdFromOIDC-JC" 
       TechnicalProfileReferenceId="Get-ClientID-FromOIDC"/>
   </ClaimsExchanges>
  </OrchestrationStep>     

然后创建一个 RESTFUL 技术配置文件,该配置文件将调用具有 {OIDC:ClientID} 的 OIDC 的函数应用程序

<TechnicalProfile Id="Get-ClientID-FromOIDC">
    <DisplayName>Get-ClientID-FromOIDC</DisplayName>
    <Protocol Name="Proprietary" 
    Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, 
    Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
     <Item Key="AuthenticationType">None</Item>
     <Item Key="ServiceUrl">--FUNCTION APP URL--</Item>
     <Item Key="SendClaimsIn">QueryString</Item>
    </Metadata>
    <InputClaims>
      <InputClaim 
        ClaimTypeReferenceId="client_id" 
        PartnerClaimType="client_id"  
        DefaultValue="{OIDC:ClientId}" />
     </InputClaims>
     <OutputClaims>
       <OutputClaim ClaimTypeReferenceId="client_id" />
      </OutputClaims>
  </TechnicalProfile>

然后最后创建一个函数应用程序,它接受来自查询字符串的客户端 ID,并以正确的格式返回它,以便 B2C 识别

使用 System.Net; 使用 System.Net.Http.Formatting;

  public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, 
  TraceWriter log)
  {
       log.Info("C# HTTP trigger function processed a request.");
      // parse query parameter
      string client_id = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "client_id", true) == 0)
        .Value;

      return req.CreateResponse<ResponseContent>(
      HttpStatusCode.OK, new ResponseContent
      {
          version = "1.0.0",
          status = (int) HttpStatusCode.OK,
          client_id = client_id
      },
      new JsonMediaTypeFormatter(), "application/json");

   }

   class ResponseContent {
     public string version;
     public int status;
     public string client_id;
 }

您现在将获得 B2C 应用程序 client_id 作为索赔包中的索赔,因此您现在可以用它做您想做的事情

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多