如何使用基础身份验证保护Azure API Gateway并对接自有用户库
Azure API Management 对接自有用户表实现身份校验的实现方案
你无需将自有用户数据同步到APIM内置用户体系,直接通过APIM原生的策略引擎配合现有认证服务即可完成访问控制,主流实现方式有两种:
方案1:OAuth2.0 密码模式(推荐)
该方案符合API安全通用规范,APIM自带令牌校验能力无需每次请求都调用认证服务,性能最优:
- 先改造现有认证服务,新增符合OAuth2.0规范的令牌签发接口,接收账号密码参数,校验自有数据库的用户数据后返回JWT令牌,可在令牌Payload中自定义携带用户角色、权限标识、用户ID等业务字段
- 进入Azure APIM控制台,在「API」菜单下找到需要保护的基础数据查询服务API,打开「策略」编辑页
- 在入站流量规则中添加
validate-jwt策略,配置认证服务的JWKS端点、颁发者地址、受众等参数,APIM会自动校验请求携带的令牌合法性,校验失败直接返回401,不会转发到后端服务 - 如需细粒度权限控制,可进一步在策略中提取JWT内的自定义字段,判断用户权限是否匹配当前调用的接口,示例策略如下:
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="无效访问令牌"> <openid-config url="https://你的认证服务域名/.well-known/openid-configuration" /> <audiences> <audience>apim-data-query</audience> </audiences> <issuers> <issuer>https://你的认证服务域名</issuer> </issuers> </validate-jwt>
方案2:自定义HTTP校验(无需改造现有认证服务)
如果当前没有条件改造认证服务为OAuth2.0接口,可直接通过APIM的send-request策略调用现有登录校验接口实现鉴权:
- 入站策略中提取请求头里携带的账号密码/自定义校验参数
- 调用现有认证服务的校验接口,根据返回结果判断是否允许请求通过
- 校验通过后可将用户ID、角色等信息写入请求头转发给后端数据查询服务,后端无需重复做身份校验
官方参考内容检索方式
直接在Azure官方文档中心搜索以下关键词即可获取对应配置教程:
- Azure API Management 策略参考 - validate-jwt
- Azure API Management 使用外部OAuth2.0服务保护API
- Azure API Management 自定义请求验证策略示例
内容的提问来源于stack exchange,提问作者coolblue2000
相关产品推荐
相关产品推荐

