尝试验证 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 访问令牌将其粘贴。
您好,我正在使用
配置:
@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 访问令牌将其粘贴。