spring 缺少必需的参数“client_secret”

u3r8eeie  于 2023-06-21  发布在  Spring
关注(0)|答案(1)|浏览(123)

我在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..*/

我尝试在链接开发中重新创建新的应用程序,但它没有帮助

kpbwa7wx

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.security.oauth2.client.registration.linkedin.client-authentication-method=post

这实际上是指示Spring将client-secret作为表单参数发送。你要做的是把它改成:

spring.security.oauth2.client.registration.linkedin.client-authentication-method=basic

这样,Spring将在Authorization头中发送client-secret,这是LinkedIn想要的。假设你的client-id和client-secret是正确的,这应该可以解决这个问题。
请记住在进行此更改后重新启动您的应用程序,有时我们往往会忘记这一点,不是吗?另外,为了确保安全,请仔细检查www.example.com文件中的client-id和client-secret值application.properties。

相关问题