Spring Boot Security集成Okta OAuth2时token请求缺少client_id参数问题求助
Spring Boot集成Okta时token请求缺失client_id参数的排查方向
首先检查application.yml/application.properties配置项是否完整,2021年对应版本的Okta Spring Boot Starter要求必填以下配置:
okta: oauth2: client-id: 你的Okta客户端ID client-secret: 你的Okta客户端密钥 issuer: https://xxxx.okta.com/oauth2/default注意配置项的层级不能错,如果把
client-id写到okta层级下而非okta.oauth2层级下会导致参数无法被自动读取。检查依赖是否正确引入,确认你使用的是官方适配的Starter坐标,而非自行手动组合Spring Security OAuth2依赖:
<!-- 2021年8-9月对应稳定版本为2.1.6 --> <dependency> <groupId>com.okta.spring</groupId> <artifactId>okta-spring-boot-starter</artifactId> <version>2.1.6</version> </dependency>如果未使用官方Starter,需要手动在Spring Security的OAuth2客户端配置中指定client_id参数:
@Bean public ClientRegistration oktaClientRegistration() { return ClientRegistration.withRegistrationId("okta") .clientId("你的client_id实际值") .clientSecret("你的client_secret实际值") .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) .tokenUri("https://xxxx.okta.com/oauth2/v1/token") // 其余授权、重定向等配置按实际需求补充 .build(); }检查授权类型配置是否匹配,如果使用的是客户端凭证模式,需要确认你没有将客户端认证方式配置为
none,该配置会自动忽略client_id参数的携带。检查是否自定义了token请求的增强器或者拦截器,自定义逻辑如果覆盖了默认的请求参数构造逻辑,也会导致client_id被遗漏,可临时注释所有自定义的OAuth2请求处理逻辑验证是否为自定义代码导致的问题。
内容的提问来源于stack exchange,提问作者Jason Nethercott
相关产品推荐
相关产品推荐

