在自定义策略中获取 Azure AD B2C 应用程序客户端 ID
Get the Azure AD B2C Application client id in the custom policy
您好,使用 B2C 应用程序的客户端 ID 调用自定义策略
我如何在政策中访问它,我认为这将被硬编码到 client_id 声明中,但我认为它不是
它仅作为 aud 声明的默认值返回,但我在自定义策略中也没有看到这一点
谢谢
好的,这有点变通,但我尝试使用标准的 UserJourneyContextProvider 技术配置文件,但没有用
因此,为了获得客户 ID 作为声明,我执行了以下操作
创建编排步骤
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange
Id="ClientIdFromOIDC-JC"
TechnicalProfileReferenceId="Get-ClientID-FromOIDC"/>
</ClaimsExchanges>
</OrchestrationStep>
然后创建一个 RESTFUL 技术配置文件,它将调用一个通过 OIDC 和 {OIDC:ClientID}
的函数应用程序
<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 和 returns 它具有 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 作为索赔袋中的索赔,因此您现在可以用它做任何想做的事
您好,使用 B2C 应用程序的客户端 ID 调用自定义策略
我如何在政策中访问它,我认为这将被硬编码到 client_id 声明中,但我认为它不是
它仅作为 aud 声明的默认值返回,但我在自定义策略中也没有看到这一点
谢谢
好的,这有点变通,但我尝试使用标准的 UserJourneyContextProvider 技术配置文件,但没有用
因此,为了获得客户 ID 作为声明,我执行了以下操作
创建编排步骤
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange
Id="ClientIdFromOIDC-JC"
TechnicalProfileReferenceId="Get-ClientID-FromOIDC"/>
</ClaimsExchanges>
</OrchestrationStep>
然后创建一个 RESTFUL 技术配置文件,它将调用一个通过 OIDC 和 {OIDC:ClientID}
的函数应用程序<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 和 returns 它具有 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 作为索赔袋中的索赔,因此您现在可以用它做任何想做的事