2017-09-26 138 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作爲索賠袋索賠,所以你可以做你現在想要做什麼用