Spring Boot OAuth2对接Mock认证服务器的配置问题求助
问题解答
一、该测试架构是否适用于API安全层面的测试?
这个架构完全适用于API安全层面的测试,核心原因如下:
- 工具适配性:
ghcr.io/navikt/mock-oauth2-server是专门为OAuth2/OpenID Connect场景设计的测试工具,支持生成无交互的Bearer令牌,完美匹配自动化测试或本地调试需求。 - 环境模拟度:认证服务器以独立容器部署,与API服务器处于同一网络,能精准模拟生产环境中服务间的OAuth2交互逻辑,同时避免影响真实认证服务。
- 覆盖核心场景:可验证API服务器的JWT令牌校验、权限控制等核心安全逻辑,包括令牌有效性、签名验证、issuer合法性校验等关键环节。
二、解决"Could not obtain the keys"(含401错误)的配置问题
从堆栈信息和你的配置来看,API服务器请求认证服务器的JWKS端点时被拒绝(401),核心原因是mock-oauth2-server默认限制了JWKS端点的未授权访问,或配置存在冲突。以下是具体修复步骤:
1. 调整认证容器配置,允许未授权访问JWKS端点
修改AuthorizationContainer,添加环境变量开启公开JWKS端点的权限:
public class AuthorizationContainer extends GenericContainer<AuthorizationContainer> { private static final DockerImageName AUTHORIZATION_IMAGE = DockerImageName.parse("ghcr.io/navikt/mock-oauth2-server:2.0.0"); private static final int APP_PORT = 8080; public AuthorizationContainer() { super(AUTHORIZATION_IMAGE); addFixedExposedPort(APP_PORT, APP_PORT); // 添加环境变量,允许未授权访问JWKS端点 addEnv("MOCK_OAUTH2_SERVER_ALLOW_UNAUTHORIZED_JWKS", "true"); waitingFor(Wait.forHttp("/isalive").forStatusCode(200)); } }
2. 优化API服务器的application.yml配置
移除冗余的jwk-set-uri配置,Spring Security会自动通过issuer-uri对应的.well-known/openid-configuration端点发现JWKS地址,避免手动配置冲突:
spring: security: oauth2: resourceserver: jwt: issuer-uri: http://localhost:8080/default
3. 验证令牌生成与校验流程
容器启动后,可通过curl获取无交互令牌(示例参数,具体可参考mock-oauth2-server官方文档):
# 获取客户端凭证模式的Bearer令牌 curl -X POST http://localhost:8080/default/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=test-client&client_secret=test-secret"
将返回的access_token作为Bearer令牌请求API服务器,验证是否能正常通过校验。
额外检查点
- 确认容器启动无报错,访问
http://localhost:8080/default/.well-known/openid-configuration能正常返回OpenID配置信息。 - 若API服务器也以容器部署,需使用认证容器的名称(而非localhost)作为
issuer-uri的地址,确保同一Docker网络内的服务发现正常。
内容的提问来源于stack exchange,提问作者David S
相关产品推荐
相关产品推荐

