2017-09-26 140 views
1

喜在Azure AD B2C应用的客户端ID自定义策略被称为与B2C应用获取自定义策略

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

我如何可以访问此策略中的客户端ID,我认为这将被硬编码到CLIENT_ID要求,但我不认为这是

它才会返回默认为AUD要求,但我又没有看到,在定制策略

感谢

+1

哎看起来你可以使用{OIDC:客户端Id}抢要求到输入索赔,需要调查更多,如果我可以坚持这个说法 任何人都知道其他{存在变量}或我可以找到一个完整列表 – user1197563

回答

1

好了一点工作的周围,但我试图用一个标准的UserJourneyContextProvider技术简介,这没有工作

因此要获得客户端ID作为要求我做了以下

创建编制步骤

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

然后创建一个RESTful技术简介这将调用一个函数应用程序传递OIDC与{OIDC:客户端ID}

<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的

; using 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作为索赔袋索赔,所以你可以做你现在想要做什么用