尝试验证 Azure 令牌时出现 401 错误

getting 401 error while trying to validate a azure token

您好,我正在使用 03-resource-server 代码来验证令牌。 但是我在使用 Postman 时一直收到 401 响应,但没有 Body 作为响应。 可能是什么问题?最近几天我一直坚持这个问题请帮忙

配置:

@EnableWebSecurity
@Order(SecurityProperties.BASIC_AUTH_ORDER)
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    // @formatter:off
    http.authorizeRequests()
            .anyRequest().authenticated()
            .and()
        .oauth2ResourceServer()
            .jwt()
            .and();
}
}

控制器:

@RestController
@RequestMapping("/api")
public class HomeController {

@GetMapping("/asd")
@ResponseBody
public String home() {
    return "Hello, this is resource server 1.";
}
}

application.yml

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          jwk-set-uri: https://login.microsoftonline.com/{tenant-id}/discovery/keys
          issuer-uri: https://login.microsoftonline.com/{tenant-id}/v2.0

pom.xml

<dependencies>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

您的 Java 代码看起来非常正确。我将从向您的应用程序属性文件添加额外的日志记录开始,看看是否能告诉您任何信息,例如:

logging:
  level:
    org:
      springframework:
        security: DEBUG

接下来我将使用 JWT 查看器查看访问令牌的 JWT header 中是否有 nonce 字段。如果是这样,那么它将无法通过验证 - 有关 Azure AD 中 exposing an API scope 的更多信息,请参阅我的 this recent answer

最后,你可以暂时换个库试试,或许能更好的解释原因。有关基于库的验证示例,请参阅 this jose4j code。您可以将其粘贴到小型 Java 控制台应用程序中,然后 运行 使用 Azure 访问令牌将其粘贴。