如何在Azure AD B2C自定义IEF策略中访问Azure Key Vault密钥
在Azure AD B2C自定义IEF策略中从Key Vault取API密钥并传入请求头
先搞懂Cryptography标签的用途
Cryptography标签下的密钥是用来做加密/解密、签名/验签的——比如给JWT令牌签名、加密用户敏感数据这种场景,不是用来存要传给API的订阅密钥的,所以你之前用这个标签完全错方向了。
正确的实现步骤
1. 先在B2C里配置Key Vault连接
- 给B2C租户的服务主体开Key Vault的
Get权限(看你存的是密钥还是机密,对应开相应权限) - 去B2C门户的策略密钥页面,创建一个「存储在Key Vault的机密」类型的密钥,关联你Key Vault里的API订阅密钥。这里一定要选「机密」类型,别选加密密钥。
2. 在自定义策略里引用密钥并塞进API请求头
在你调用API的技术配置文件(就是RestfulProvider类型的那个)里,用Header元素把密钥传进去就行:
<TechnicalProfile Id="YourApiCallProfile"> <DisplayName>调用目标API</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://你的API地址/接口路径</Item> <Item Key="SendClaimsIn">Headers</Item> </Metadata> <HeaderParameters> <!-- 这里引用策略密钥作为请求头 --> <HeaderParameter Name="Subscription-Key" DefaultValue="{Settings:你创建的策略密钥名称}" /> </HeaderParameters> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
注意:{Settings:你创建的策略密钥名称}里的名称,就是你在B2C策略密钥里新建的那个密钥的名字。
3. 验证配置
跑一遍自定义策略的流程,抓包看看API请求的头,确认Subscription-Key(或者你API要求的头名称)是不是已经带上了Key Vault里的密钥值。
容易踩的坑
- 别忘给B2C的服务主体配Key Vault的权限,不然会拿不到密钥
- 策略密钥类型必须是「存储在Key Vault的机密」,加密密钥是给Cryptography标签用的,别搞混
- 要和API要求的请求头名称对应上,有的API要求的是
Api-Key不是Subscription-Key
内容的提问来源于stack exchange,提问作者Rishi Parpyani
相关产品推荐
相关产品推荐

