Kong API网关:如何通过OpenID Connect传递微软Bearer令牌至上游服务
一、核心思路
利用Kong的OpenID Connect插件完成Microsoft OAuth2.0的client_credentials流认证,自动获取access_token并存入Kong上下文变量,再通过request-transformer插件将该令牌作为Header转发给上游服务。
二、步骤1:配置OpenID Connect插件(适配Client Credentials流)
无需复杂配置,聚焦以下关键参数即可(其余保持默认):
issuer:https://login.microsoftonline.com/XXXXXXXXXXX/v2.0(替换为你的Microsoft租户ID)client_id: 你的Microsoft应用注册Client IDclient_secret: 你的Microsoft应用注册Client Secretauth_methods:["client_credentials"](明确指定客户端凭证流)token_endpoint_auth_method:client_secret_post(Microsoft默认要求的认证方式)introspect_tokens:false(client_credentials流无需令牌 introspect,减少无效请求)
配置命令示例(通过Kong Admin API):
curl -X POST http://<kong-admin地址>/plugins \ --data "name=openid-connect" \ --data "config.issuer=https://login.microsoftonline.com/XXXXXXXXXXX/v2.0" \ --data "config.client_id=你的MS应用ClientID" \ --data "config.client_secret=你的MS应用ClientSecret" \ --data "config.auth_methods[]=client_credentials" \ --data "config.token_endpoint_auth_method=client_secret_post" \ --data "config.introspect_tokens=false" \ --data "route_ids=你的API路由ID"
配置完成后,Kong会自动向Microsoft令牌端点请求access_token,并将其存入上下文变量ngx.var.openid_connect_access_token。
三、步骤2:用request-transformer传递令牌到上游
在同一路由上配置request-transformer插件,将令牌变量注入上游请求的Authorization Header:
配置命令示例:
curl -X POST http://<kong-admin地址>/plugins \ --data "name=request-transformer" \ --data "config.add.headers[Authorization]=Bearer \$openid_connect_access_token" \ --data "route_ids=你的API路由ID"
注意变量引用格式:$openid_connect_access_token,Kong会自动替换为实际令牌值。
四、常见问题说明
找不到oauth-2插件?
Kong官方OAuth2.0插件是oauth2(无横杠),默认可能未启用。可通过kong plugins list查看已启用插件,若未开启,需在Kong配置文件中添加plugins=bundled,oauth2后重启。不过针对你的需求,OpenID Connect插件更适配Microsoft OAuth服务,无需使用oauth2插件。OpenID Connect配置验证
若未获取到令牌,可开启Kong调试日志(设置log_level=debug),查看日志中令牌请求的错误信息。常见问题包括租户ID错误、ClientID/Secret无效、网络无法访问Microsoft令牌端点。
内容的提问来源于stack exchange,提问作者b.kaur

