azure Sping Boot 资源服务器无法验证我的令牌

cu6pst1q  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(196)

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";
}

不确定我是否错过了任何其他的步骤。我还没有定制任何安全配置。所以我假设它只使用默认配置。
任何帮助都将不胜感激。
谢谢!

z2acfund

z2acfund1#

我尝试在我的环境中重现相同的结果,结果如下:

我使用以下参数生成了访问令牌:

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token


client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default
grant_type:client_credentials

解码令牌时,出现如下相同错误:

    • 注意**:为Graph生成的令牌不需要验证,也不会验证代码中的签名。
    • 或者**,要解决该错误,您可以在门户中公开API,如下所示:

我生成了scopeapi://ClientIDofApp/.default的访问令牌:

    • 签名验证成功,如下所示:**

相关问题