Spring Security5整合Azure AD客户端凭证调用服务报403配置问询
问题根因
403错误是因为服务B向Azure AD请求客户端凭证令牌时,未指定目标资源(服务A)的标识,导致返回的JWT令牌的aud(受众)字段不匹配服务A配置的校验规则。Azure AD客户端凭证流要求显式指定要访问的资源scope才能下发对应受众的令牌。
解决方案
1. 修改服务B的OAuth2客户端配置
在服务B的spring.security.oauth2.client.registration.azure-ad配置段下新增scope配置,值为服务A的资源ID加/.default(适配Azure AD v1令牌端点规则),修改后完整配置如下:
spring: security: oauth2: client: provider: azure-ad: token-uri: https://login.microsoftonline.com/***-tenant-id-**/oauth2/token registration: azure-ad: authorization-grant-type: client_credentials client-id: ****-resource-id-**** client-secret: ****-client-seret-*** # 新增scope配置,指定要访问的服务A资源 scope: - ****-resource-id-****/.default
2. 调用确认
原有WebClient配置无需额外修改,发起调用时会自动携带指定scope请求对应令牌,令牌的aud字段会自动设置为服务A的资源ID,匹配服务A的受众校验规则。
验证方法
如果需要确认令牌是否正确,可以在服务B调用时临时打印拿到的JWT令牌,解析后查看aud字段是否为****-resource-id-****,确认一致即可正常访问服务A接口。
内容的提问来源于stack exchange,提问作者user09
相关产品推荐
相关产品推荐

