spring-security - 如何向 Cognito 发布的 id_token 添加“组”自定义声明?
问题描述
我想在打开的 id connect id_token 上使用自定义声明来指示用户所属的组。
我使用 Okta 和 Spring Security 5 进行了这项工作。使用 Okta 有一种简单的方法来设置自定义声明并将其与用户组相关联。
现在我想对 Cognito 做同样的事情。
如何将 Spring Securities 组/角色权限与 Cognito 结合使用?
我有使用 Spring Security 5、Webflux 和 Cognito 的开放 id connect 登录,但现在我想添加一些基于角色的、组成员身份的粗粒度权利。
我已向我的用户池添加了一个自定义属性,但看不到如何填充它。
谢谢
解决方案
只想在这里添加一个实现示例。
我使用我的自定义JwtAuthenticationConverter来提取 cognito:groups 并将它们绑定到 Spring Security Authorities。
Stack 和你的一样(Webflux,Spring 5 [boot])。这是转换器类:
@Component
public class GrantedAuthoritiesExtractor extends JwtAuthenticationConverter {
@Override
protected Collection<GrantedAuthority> extractAuthorities(Jwt jwt) {
val authorities = (Collection<String>) jwt.getClaims().get("cognito:groups");
if (authorities == null) {
return emptyList();
}
return authorities.stream()
.map(SimpleGrantedAuthority::new)
.collect(toList());
}
}
这是我的 SecurityConfiguration 中的相关部分:
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http,
GrantedAuthoritiesExtractor extractor) {
http
// ...
// Other configurations
// ...
.oauth2ResourceServer()
.jwt()
.jwtAuthenticationConverter(new ReactiveJwtAuthenticationConverterAdapter(extractor));
return http.build();
}
还有一点应该提到的是,@EnableReactiveMethodSecurity注释应该放在 SecurityConfiguration 类之上,以在整个应用程序中启用@PreAuthorize 注释的功能。
推荐阅读
- wso2 - Identity Server 不验证 SAML LogoutRequest 签名
- java - Android:E/RecyclerView:没有附加适配器;跳过布局
- c++ - 如何在主事件循环仍在旋转的情况下通知线程在应用程序退出时关闭
- python - Heroku 烧瓶应用程序失败:找不到 importlib.util 模块错误
- css - 在最后一帧停止 CSS 淡入淡出动画幻灯片
- javascript - 如何重构这个 JS 地理定位代码?
- python - Pytesseract image_to_string 方法未返回预期输出
- ruby-on-rails - Rails - Heroku 部署问题
- r - 向 ChartSeries Quantmod 添加自定义指标
- java - CSF - 连接被拒绝