invalid_token_response 尝试检索 OAuth 2.0 访问令牌响应时发生错误:401 未经授权:[无正文]

Nar*_*war 2 azure-active-directory spring-security-oauth2 azure-web-app-service

我已添加 Azure AD 作为身份验证服务器,但它向我显示以下错误

[invalid_token_response] 尝试检索 OAuth 2.0 访问令牌响应时发生错误:401 未经授权:[无正文]

  • Springboot:2.5.8
  • Azure版本:3.10.0

我的应用程序属性:

 spring.security.oauth2.client.registration.azure-client.provider=azure-ad
 spring.security.oauth2.client.registration.azure-client.client-id=<Client_id>
 spring.security.oauth2.client.registration.azure-client.client-secret=<Client_secret>
 spring.security.oauth2.client.registration.azure-client.authorization-grant-type=authorization_code
 spring.security.oauth2.client.registration.azure-client.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
 spring.security.oauth2.client.registration.azure-client.scope=openid, profile
 spring.security.oauth2.client.registration.azure-client.client-authentication-method=post
 spring.security.oauth2.client.provider.azure-ad.authorization-uri=https://login.microsoftonline.com/common/oauth2/v2.0/authorize
 spring.security.oauth2.client.provider.azure-ad.token-uri=https://login.microsoftonline.com/common/oauth2/v2.0/token
 spring.security.oauth2.client.provider.azure-ad.jwk-set-uri=https://login.microsoftonline.com/common/discovery/v2.0/keys
 spring.security.oauth2.client.provider.azure-ad.user-name-attribute=name
 server.forward-headers-strategy=native
 logging.level.org.springframework.security=DEBUG
Run Code Online (Sandbox Code Playgroud)

和 SecurityConfig 类:

 @Configuration
 @EnableWebSecurity
 public class SecurityConfig extends WebSecurityConfigurerAdapter {    
     @Override
     protected void configure( HttpSecurity http ) throws Exception {    
         http.authorizeRequests()
                 .antMatchers( "/oauth2/**", "/login/**" ).permitAll()
                 .anyRequest().authenticated()
                 .and()
                 .oauth2Login()
                 .defaultSuccessUrl( "/home" );
    
     }
 }
Run Code Online (Sandbox Code Playgroud)

和控制器:

 @RestController
 public class HomeController {
    
     @GetMapping( "home" )
     public String home( @AuthenticationPrincipal(expression = "claims['name']") String name ) {
         return String.format( "Hello %s!  welcome to the Security app", name);
     }
 }
Run Code Online (Sandbox Code Playgroud)

Mat*_*ann 7

我在更新到 Spring Boot 3 和 Spring security 6 时遇到了同样的错误。invalid_token_response解决方案是更正属性

spring.security.oauth2.client.registration.<id>.client-authentication-method并将其设置为client_secret_post而不是post.

post不存在(不再存在)。与https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/oauth2/core/ClientAuthenticationMethod.html#CLIENT_SECRET_POST进行比较


小智 6

关于解决办法

解决方案 1: 确保您在文件中输入了正确的TenantIDApplicationIDApplication_Secret以及组名称application.properties

并且您的应用程序请求的范围已在 Azure 门户中配置(如果需要管理员同意,请授予它)。

解决方案 2: 尝试将 azure 端点从 v2 更改为 v1。这是通过更改端点来完成的

例如,http://login.microsoft.com/common/oauth2/v2.0/authorize 变为http://login.microsoft.com/common/oauth2/authorize,如v1 和 v2 比较中所示。

有关 v1 的更多信息,请参阅此 文档

有关更多详细信息,请参阅此SO 线程

  • 感谢您的回复,实际问题是我添加了错误的客户端密钥,添加正确的密钥后它工作正常。 (2认同)