Azure API Management向Azure Web App认证:外部用户OAuth2.0配置咨询
实现Azure API Management外部非AD用户的OAuth2.0+订阅密钥双验证方案
核心思路
通过第三方OAuth2.0身份提供商(IDP)管理外部已审核用户的身份,在APIM中配置JWT验证确保用户身份合法且已通过审核,同时叠加订阅密钥验证完成双重校验,无需将外部用户添加为Microsoft Entra来宾用户。
具体配置步骤
1. 选择并配置外部身份提供商
选用支持OAuth2.0/OIDC的第三方IDP(如Auth0、Okta或自建身份服务),完成以下配置:
- 在IDP中创建APIM对应的应用注册,获取客户端ID、客户端密钥
- 配置用户注册流程,添加审核环节(仅审核通过的用户可获取有效JWT)
- 确保IDP签发的JWT包含
approved: true这类标识用户审核状态的Claim
2. 在APIM中配置OAuth2.0身份验证
进入目标APIM实例,找到需保护的API,在「设置」标签中完成:
- 找到「OAuth 2.0」区域,点击「添加」
- 填写IDP相关信息:
- 名称:自定义标识(如「ExternalUserAuth」)
- 授权端点URL:IDP的OAuth2.0授权端点
- 令牌端点URL:IDP的令牌获取端点
- 客户端ID/密钥:IDP中创建的应用凭证
- 范围:按需定义(如
api://external-user-access)
- 保存配置
3. 配置APIM入站策略实现双验证
在API的「入站策略」中添加JWT验证和订阅密钥验证逻辑,示例策略代码:
<inbound> <!-- 验证外部IDP签发的JWT,确保用户已通过审核 --> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid or unauthorized token"> <openid-config url="https://your-external-idp-domain/.well-known/openid-configuration" /> <required-claims> <claim name="approved" match="any"> <value>true</value> </claim> </required-claims> </validate-jwt> <!-- 验证APIM订阅密钥 --> <validate-api-key header-name="Ocp-Apim-Subscription-Key" query-parameter-name="subscription-key" /> <base /> </inbound>
说明:
openid-config填写IDP的OIDC配置地址,用于自动获取公钥验证JWT签名required-claims确保只有审核通过(approved: true)的用户能通过验证
4. 订阅密钥分发与用户访问流程
- 在APIM中创建专属产品,关联需开放给外部用户的API
- 为已通过审核的外部用户创建APIM订阅,生成对应的订阅密钥并分发
- 用户访问流程:
- 在IDP完成身份认证,获取带有
approved: true标识的JWT令牌 - 调用APIM API时,同时携带两个请求头:
Authorization: Bearer <JWT_TOKEN>Ocp-Apim-Subscription-Key <SUBSCRIPTION_KEY>
- APIM依次验证JWT合法性、用户审核状态、订阅密钥有效性,全部通过则转发请求至后端服务
- 在IDP完成身份认证,获取带有
内容的提问来源于stack exchange,提问作者Roelant M
相关产品推荐
相关产品推荐

