我有一个应用程序,我从认知池登录后获得JWT令牌。JWt令牌有用户声明。它有一个名为ROle的自定义声明。基于角色,我想保护我的APIS.For example,如果我有一个用户,他只需要访问/user APIS,admin需要访问所有的APIS。我在后端使用Springboot。那么如何使用Spring Security来保护
我有一个应用程序,我从认知池登录后获得JWT令牌。JWt令牌有用户声明。它有一个名为ROle的自定义声明。基于角色,我想保护我的APIS.For example,如果我有一个用户,他只需要访问/user APIS,admin需要访问所有的APIS。我在后端使用Springboot。那么如何使用Spring Security来保护
3条答案
按热度按时间ergxz8rk1#
我也有同样的问题。作为默认的Spring Resource Server(使用Spring Security),读取声明
scope
,添加创建授权权限列表。它添加了前缀SCOPE_
,因此权限可能如下所示:SCOPE_{authority}
。由于您可能会在Cognito提供的JWT令牌中使用其他声明,因此您必须将其转换为授予权限。所以Spring可以检查它。让我们看看我的Github存储库,看看我如何将claimcognito: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
khbbv19g2#
所有my tutorials都配置了Cognito。它涵盖了许多用例:资源服务器与JWT解码器,因为你似乎正在寻找,但也资源服务器与令牌内省和OAuth2客户端。
对于servlet或React式应用程序,以及有或没有我的Sping Boot Starters(这使得可以从应用程序属性配置权限Map),它被拒绝。
带有JWT解码器的servlet资源服务器示例:
这将从单个
cognito:groups
声明Map权限,没有任何前缀或大小写转换,但是,仅使用属性,您可以添加任意多个声明(感谢JSON-Path,即使那些不只是在根节点下),并且对于每个声明:juzqafwq3#
由于Coignito已经集成,使用API网关和Cognito用户池身份验证,每个API都可以被身份验证和授权。https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html