-
k8s 环境下,使用 jwk-set-uri 解决外部资源服务器公钥证书验证问题
- 2023-04-24 15:01
-
字数 372
- 阅读 446
在使用 Spring Authorization Server 搭建认证服务器时,一般会配置 issuer。如果认证服务使用 k8s 部署,第三方资源服务器(如开发测试环境)在 k8s 外部,则可以通过配置 jwk-set-uri 来解决外部资源服务器公钥证书验证问题。
首先,认证服务器配置 AuthorizationServerSettings,指定 issuer ,代码如下:
@Bean public AuthorizationServerSettings authorizationServerSettings() { return AuthorizationServerSettings.builder().issuer(issuer).build(); }
查看 AuthorizationServerSettings 默认配置信息为:
public static Builder builder() { return (new Builder()).authorizationEndpoint("/oauth2/authorize").tokenEndpoint("/oauth2/token").jwkSetEndpoint("/oauth2/jwks").tokenRevocationEndpoint("/oauth2/revoke").tokenIntrospectionEndpoint("/oauth2/introspect").oidcClientRegistrationEndpoint("/connect/register").oidcUserInfoEndpoint("/userinfo"); }
在资源服务器,我们使用 spring.security.oauth2.resourceserver.jwt.issuer-uri 配置与认证服务器 issuer 一样即可,如:
spring: security: oauth2: resourceserver: jwt: issuer-uri: http://localhost:9000
使用 k8s 进行部署时,内部服务调用也可以直接使用服务名加端口方式,如:
spring: security: oauth2: resourceserver: jwt: issuer-uri: http://auth-server:8080
部署在 k8s 外部的资源服务启动时,调用部署在 k8s 内的认证服务进行 jwks 验证,如果 issuer 配置认证服务名,则导致外部资源服务器不能访问;如果 issuer 配置外部 ip 地址,则内部访问报如下错误:
Unable to resolve the Configuration with the provided Issuer of xxx
通过查阅相关文档,发现资源服务器增加 jwk-set-uri 配置即可,配置如下:
spring: security: oauth2: resourceserver: jwt: issuer-uri: http://192.168.1.60 jwk-set-uri: http://192.168.1.60/oauth2/jwks
其中, 192.168.1.60 为认证服务器的真实 ip 地址。