在Azure B2C中,通過程序創建用戶后,我想通過電子郵件向用戶發送一個鏈接,以便他們可以設置密碼。我使用我自己的電子郵件提供商,而不是B2C,所以我只需要一個URI,可以包含在我的“歡迎”電子郵件中。
該鏈接需要專門針對他們,這樣當他們點擊它時,他們就不必re-enter他們的電子郵件地址并完成整個email-verification過程。
我使用的是B2C自定義策略,根據文檔,它應該允許我向這個名為id_token_hint
的URL添加一個查詢字符串。這是一個self-signed JWT令牌,其中包含我要傳遞給我的策略的聲明(在我的情況下,為email
)。
我遵循這兩個鏈接中的指導/指示:
- https://learn.microsoft.com/en-us/azure/active-directory-b2c/id-token-hint
- https://github.com/azure-ad-b2c/samples/tree/master/policies/invite
我正在為我的self-signed證書托管.well-known
端點,當我進行測試時,可以看到B2C正在調用這兩個端點。
我的問題是,我無法獲得使用我嵌入id_token_hint
JWT令牌中的電子郵件的策略。
我有一個技術檔案來消費它。。。
<TechnicalProfile Id="IdTokenHint_ExtractClaims">
<DisplayName>My ID Token Hint TechnicalProfile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="METADATA">https://<my-domain>/.well-known/openid-configuration</Item>
<Item Key="issuer">https://localhost/</Item>
</Metadata>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>
</TechnicalProfile>
我從我的用戶旅程中引用了它。。。
<OrchestrationStep Order="1" Type="GetClaims" CpimIssuerTechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
引用像這樣的user-journey(即使用CpimIssuerTechnicalProfileReferenceId
),這就是上面文檔所說的要做的,不允許我在下一個技術概要文件中將該電子郵件作為<InputClaim>
添加。然后在嘗試上傳時會出現此驗證錯誤。。。
索賠類型“電子郵件”是依賴方技術檔案的輸出索賠,但在用戶旅程的任何步驟中都不是輸出索賠"DanTest"."
盡管如此,它還是IdTokenHint_ExtractClaims
的輸出聲明!
如果我將編排步驟改為這樣。。。
<OrchestrationStep Order="1" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="IdTokenHint_ExtractClaims" TechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
</ClaimsExchanges>
</OrchestrationStep>
然后成功上傳。然而,我收到一個運行時錯誤,上面寫著。。。
試圖為id為"mytenant.onmicrosoft.com"."的租戶的id為"B2C_1A_dantest"的策略中id為{@19}的技術配置文件中不受支持的協議“None”解析協議處理程序
我正在努力尋找下一步該做什么。你知道我做錯了什么嗎?
除了指定ID令牌提示技術配置文件外,您還需要將索賠作為輸入索賠添加到依賴方技術配置文件中:
Docs: https://learn.microsoft.com/en-us/azure/active-directory-b2c/id-token-hint#configure-your-policy