首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS-Cognito:如何在用户池中分配用户角色?

AWS-Cognito:如何在用户池中分配用户角色?
EN

Stack Overflow用户
提问于 2019-05-20 02:42:23
回答 3查看 4.2K关注 0票数 3

我有一个用户管理系统,其中我使用AWS-Cognito userPool进行注册/登录过程。我需要为这些用户分配角色。

例如:超级管理员、推荐人等。

超级管理员角色负责添加/删除/编辑用户。有没有什么方法可以仅仅通过使用userPool特性来做到这一点?此外,是否可以通过AWS控制台而不是API来分配角色?

EN

回答 3

Stack Overflow用户

发布于 2019-05-20 03:26:44

超级管理员角色负责添加/删除/编辑用户。有没有什么方法可以仅仅通过使用userPool特性来做到这一点?

你可以使用assign IAM roles to groups。例如,如果您创建了一个分配给superadmingroup组的superadminrole,则超级管理员将根据该Actions for Amazon Cognito User Pools执行相应的操作,例如cognito-idp:AdminCreateUsercognito-idp:AdminDeleteUsercognito-idp:AdminAddUserToGroupcognito-idp:ListUserscognito-idp:ListUsersInGroup等。然后,登录的超级管理员可以执行相应的用户任务。另请阅读Developers and administrators can perform the following tasks列表,以了解哪些操作可用。

此外,是否可以通过

控制台而不是通过应用程序接口来分配角色?

是的,从AWS Cognito开发人员指南中的Viewing User Attributes部分复制(我的重点)

从Amazon Cognito主页的AWS管理控制台中,选择Manage your user identities

Your user Pools页面选择您的用户池。

选择User and Groups以查看用户信息。

选择用户名以显示有关单个用户的详细信息。在此屏幕中,您可以执行以下任何操作:

  1. Add user to group
  2. Reset user password
  3. Confirm user
  4. Enable or disable MFA
  5. Delete user
票数 5
EN

Stack Overflow用户

发布于 2019-05-20 03:07:35

AWS Cognito支持基于角色的访问控制,这可能是您的用例。

请参阅:https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html

票数 0
EN

Stack Overflow用户

发布于 2021-04-27 05:40:58

我只是在Spring Boot项目中遇到了这个问题,没有找到最新的答案。我遇到的所有东西都是Spring Security 5.4之前的版本。所以我想我应该把这篇文章放在那里,以帮助其他正在寻找答案的人。

认知中的角色似乎是以IAM访问为导向的。为了在我的应用程序中为用户设置角色,我在users and groups部分中添加了组,以处理类似角色的元数据。

所以,我有像“角色:管理员”,“角色:高级”等组。

然后,我在我的spring boot应用程序中设置了OAuth2登录安全配置。将这些依赖项放在maven文件中:

代码语言:javascript
复制
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-oauth2-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-oauth2-jose</artifactId>
    </dependency>

您将需要以下属性:

代码语言:javascript
复制
app.url=http://localhost:8080
cognito.region=<aws region>
cognito.poolId=<your pool id>
cognito.poolName=<your pool name>
cognito.rooturl=https://${cognito.poolName}.auth.${cognito.region}.amazoncognito.com
spring.security.oauth2.client.registration.cognito.provider=cognito
spring.security.oauth2.client.registration.cognito.client-id=<your client id>
spring.security.oauth2.client.registration.cognito.client-secret=<your client secret>
spring.security.oauth2.client.registration.cognito.client-name=${cognito.poolName}
spring.security.oauth2.client.registration.cognito.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.cognito.scope=email,openid
spring.security.oauth2.client.registration.cognito.redirect-uri=${app.url}/login/oauth2/code/cognito

spring.security.oauth2.client.provider.cognito.authorizationUri=${cognito.rooturl}/oauth2/authorize
spring.security.oauth2.client.provider.cognito.tokenUri=${cognito.rooturl}/oauth2/token
spring.security.oauth2.client.provider.cognito.jwkSetUri=https://cognito-idp.${cognito.region}.amazonaws.com/${cognito.poolId}/.well-known/jwks.json
spring.security.oauth2.client.provider.cognito.user-info-uri=${cognito.rooturl}/oauth2/userInfo
spring.security.oauth2.client.provider.cognito.userNameAttribute=username

这将使您登录,您的令牌将在其声明中有一个"cognito:groups“列表。要将其提取出来并放入权威机构,您需要创建一个OAuth2UserService如下:

代码语言:javascript
复制
public class CognitoOIDCUserService implements OAuth2UserService<OidcUserRequest, OidcUser> {

    private static final String ROLE_PREFIX = "ROLE:";

    @Override
    public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException {
        Map<String, Object> parameters = userRequest.getIdToken().getClaims();
        List<String> groups = (List<String>) parameters.get("cognito:groups");
        List<GrantedAuthority> authorities =
                groups.stream().filter(group -> group.startsWith(ROLE_PREFIX))
                        .map(group -> group.substring(ROLE_PREFIX.length()))
                        .map(role -> new SimpleGrantedAuthority("ROLE_" + role))
                        .collect(Collectors.toList());

        return new DefaultOidcUser(authorities, userRequest.getIdToken(), "cognito:username");
    }
}

然后将其添加到您的安全配置中:

代码语言:javascript
复制
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private CognitoAuthenticationSuccessHandler successHandler;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf()
                .and()
                .authorizeRequests(authz -> authz.mvcMatchers("/")
                        .permitAll()
                        .anyRequest()
                        .authenticated())
                .oauth2Login()
                .userInfoEndpoint(userInfo -> userInfo.oidcUserService(new CognitoOIDCUserService()))
                .successHandler(successHandler)
                .and()
                .logout()
                .logoutSuccessUrl("/");
    }
}

然后你就能拥有它了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56210916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档