I am a beginner in Spring outh2 security. I was trying to secure my spring boot rest api's and run them in postman , But I always get the "Bearer error="invalid_token", error_description="An error occurred while attempting to decode the Jwt: Signed JWT rejected: Invalid signature", error_uri="https://tools.ietf.org/html/rfc6750#section-3.1"" error.
注意:-我正在使用Azure AD作为授权服务器。
随后采取了步骤。
1.在STS中实现以下代码并运行应用程序。
1.使用客户端凭据身份验证类型,通过 Postman "获取新访问令牌"创建了访问令牌。
1.使用该访问令牌并使用Get请求调用我的Spring Boot API。
Note: - When I copy my postman generated token in jwt.io I get a Invalid Signature at the bottom ..but I am able to read the header /payload.
但是当我将算法切换到HS256时,我不再得到无效签名。
screenshot of postman下面是我的基本代码。
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>resourceserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>resourceserver</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
My application.properties
server.port=8090
logging.level.org.springframework.security=DEBUG
spring.security.oauth2.resourceserver.jwt.issuer-uri=https://sts.windows.net/tenenentid
尝试使用这个网址,但没有运气。
spring.security.oauth2.resourceserver.jwt.issuer-uri=https://login.microsoftonline.com/tenentid
基本Rest API。
@GetMapping("/validateApi")
public String validateApi() {
System.out.println("validateApi");
return "invalid";
}
不确定我是否错过了任何其他的步骤。我还没有定制任何安全配置。所以我假设它只使用默认配置。
任何帮助都将不胜感激。
谢谢!
1条答案
按热度按时间z2acfund1#
我尝试在我的环境中重现相同的结果,结果如下:
我使用以下参数生成了访问令牌:
解码令牌时,出现如下相同错误:
我生成了scope为
api://ClientIDofApp/.default
的访问令牌: