Spring Security 我有一个AWS cognito JWT令牌,它有自定义的声明角色,如何根据后端的角色使用springboot保护我的API

cbjzeqam  于 2023-06-23  发布在  Spring
关注(0)|答案(3)|浏览(205)

我有一个应用程序,我从认知池登录后获得JWT令牌。JWt令牌有用户声明。它有一个名为ROle的自定义声明。基于角色,我想保护我的APIS.For example,如果我有一个用户,他只需要访问/user APIS,admin需要访问所有的APIS。我在后端使用Springboot。那么如何使用Spring Security来保护

ergxz8rk

ergxz8rk1#

我也有同样的问题。作为默认的Spring Resource Server(使用Spring Security),读取声明scope,添加创建授权权限列表。它添加了前缀SCOPE_,因此权限可能如下所示:SCOPE_{authority}。由于您可能会在Cognito提供的JWT令牌中使用其他声明,因此您必须将其转换为授予权限。所以Spring可以检查它。让我们看看我的Github存储库,看看我如何将claim cognito:groups的值转换为权限,以便Spring Security可以检查它。你也可以对其他索赔做同样的事情。
回购:https://github.com/quan-nguyen97/springboot-cognito-auth
也请参阅此文档:https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html#oauth2resourceserver-jwt-authorization

khbbv19g

khbbv19g2#

所有my tutorials都配置了Cognito。它涵盖了许多用例:资源服务器与JWT解码器,因为你似乎正在寻找,但也资源服务器与令牌内省和OAuth2客户端。
对于servlet或React式应用程序,以及有或没有我的Sping Boot Starters(这使得可以从应用程序属性配置权限Map),它被拒绝。
带有JWT解码器的servlet资源服务器示例:

<dependency>
    <groupId>com.c4-soft.springaddons</groupId>
    <artifactId>spring-addons-webmvc-jwt-resource-server</artifactId>
    <version>6.1.11</version>
</dependency>
@Configuration
@EnableMethodSecurity()
public class SecurityConfig {
}
cognito-issuer: https://cognito-idp...
allowed-origins:
- http://localhost:4200
- http://localhost:3000

com:
  c4-soft:
    springaddons:
      security:
        cors:
        - path: /**
          allowed-origins: ${allowed-origins}
        issuers:
        - location: ${cognito-issuer}
          username-claim: username
          authorities:
          - path: $.cognito:groups
        permit-all:
        - "/actuator/health/readiness"
        - "/actuator/health/liveness"

这将从单个cognito:groups声明Map权限,没有任何前缀或大小写转换,但是,仅使用属性,您可以添加任意多个声明(感谢JSON-Path,即使那些不只是在根节点下),并且对于每个声明:

  • 加前缀
  • 转换为大写或小写
juzqafwq

juzqafwq3#

由于Coignito已经集成,使用API网关和Cognito用户池身份验证,每个API都可以被身份验证和授权。https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

相关问题