我在JavaSpring中有一个网站,我使用Spring Security登录到我通过LinkedIn实现的应用程序。登录时,我得到这个错误(http://localhost:8080/login?error=[invalid_request]%20A%20required%20parameter%20%20%22client_secret%22%20is%20missing)我不知道如何解决它我100%确定我在设置中正确指定了它(spring.security.oauth2.client.registration.linkedin.client-secret)请告诉我如何解决这个问题
application.properties 文件:
spring.security.oauth2.client.registration.linkedin.client-id=****
spring.security.oauth2.client.registration.linkedin.client-secret=****
spring.security.oauth2.client.registration.linkedin.scope=profile
spring.security.oauth2.client.registration.linkedin.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.linkedin.redirect-uri=http://localhost:8080/login/oauth2/code/linkedin
spring.security.oauth2.client.registration.linkedin.client-name=LinkedIn
spring.security.oauth2.client.registration.linkedin.provider=linkedin
spring.security.oauth2.client.registration.linkedin.client-authentication-method=post
spring.security.oauth2.client.provider.linkedin.authorization-uri=https://www.linkedin.com/oauth/v2/authorization
spring.security.oauth2.client.provider.linkedin.token-uri=https://www.linkedin.com/oauth/v2/accessToken
spring.security.oauth2.client.provider.linkedin.user-info-uri=https://api.linkedin.com/v2/userinfo
spring.security.oauth2.client.provider.linkedin.jwk-set-uri=
spring.security.oauth2.client.provider.linkedin.user-name-attribute=id
spring.security.oauth2.client.provider.linkedin.user-info-authentication-method=post
类SpringSecurityConfig:
/*..other code..*/
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authorize) -> authorize
.requestMatchers("/home").permitAll()
.anyRequest().authenticated()
)
.oauth2Login(oauth2Login -> oauth2Login
.loginPage("/login")
.defaultSuccessUrl("/home")
.failureHandler(new OAuth2AuthenticationFailureHandler())
.successHandler(oAuth2LoginSuccessHandler)
.permitAll()
)
/*..other code..*/
我尝试在链接开发中重新创建新的应用程序,但它没有帮助
1条答案
按热度按时间kpbwa7wx1#
好吧,是这样的,伙计。我认为您正在处理的问题实际上可能不是关于www.example.com文件中的client-secret不正确或丢失application.properties,尽管错误消息是这样说的。
这很可能是关于你的应用在OAuth2身份验证过程中向LinkedIn发送客户端密码的方式。这里的事情,LinkedIn期待在HTTP请求的Authorization头中的client-secret。Authorization标头的值应为'Basic ',后跟base64编码值'client-id:client-secret'。但是Spring Security默认情况下将client-id和client-secret作为表单参数发送,而不是在Authorization头中。
在您的application.properties文件中,我可以看到这一行:
这实际上是指示Spring将client-secret作为表单参数发送。你要做的是把它改成:
这样,Spring将在Authorization头中发送client-secret,这是LinkedIn想要的。假设你的client-id和client-secret是正确的,这应该可以解决这个问题。
请记住在进行此更改后重新启动您的应用程序,有时我们往往会忘记这一点,不是吗?另外,为了确保安全,请仔细检查www.example.com文件中的client-id和client-secret值application.properties。