如何执行Auth0 JWT令牌用户基于角色的授权

问题描述 投票:0回答:1

我正在编写Spring Boot REST API,并且正在使用JWT令牌。现在,我正在尝试创建基于角色的授权。

这是我正在使用的教程/实现。

https://auth0.com/blog/implementing-jwt-authentication-on-spring-boot/

我通过附加的Role实体扩展了此实现,并将@ManyToMany映射添加到ApplicationUser Entity。

现在,据我所知,应该在令牌创建过程中将用户角色添加到令牌中。因此,这是一个现有代码:

@Override
    protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth) throws IOException, ServletException {


        String token = JWT.create()
                .withSubject(((User) auth.getPrincipal()).getUsername())
                .withExpiresAt(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .sign(HMAC512(SECRET.getBytes()));
        res.addHeader(HEADER_STRING, TOKEN_PREFIX + token);
    }

我想应该在此处添加用户角色。有一个功能:

withArrayClaim(String Name, String[] items)

还有我的第一个问题:我不确定如何正确添加它。

然后,这是片段,据我了解,这是验证令牌的地方:

private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
        String token = request.getHeader(HEADER_STRING);
        if (token != null) {
            // parse the token.
            String user = JWT.require(Algorithm.HMAC512(SECRET.getBytes()))
                    .build()
                    .verify(token.replace(TOKEN_PREFIX, ""))
                    .getSubject();

            if (user != null) {
                return new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>());
            }
            return null;
        }
        return null;
    }

困扰我的是片段:

return new UsernamePasswordAuthenticationToken(user, null, new ArrayList<>());

我不明白为什么会有空值(Inteliij将其突出显示为“凭据”)和这个新的ArrayList。有没有地方我应该从令牌中获取角色,然后添加它们?

我知道,这是一个范围很广的问题,但是我找不到其他解决方案。或者,也许还有一种更简单的方法来创建简单的JWT令牌身份验证/授权(基于角色)。

期待您的回答!

编辑:

或者也许还有其他更简单的解决方案-不将用户角色保留在密钥内-而是仅将它们添加到null和new ArrayList所在的“第二部分”中]]

我正在编写Spring Boot REST API,并且正在使用JWT令牌。现在,我正在尝试创建基于角色的授权。这是我正在使用的教程/实现。 https://auth0.com/blog / ...

spring-boot spring-security jwt auth0 jwt-auth
1个回答
0
投票

只需根据用户角色创建授予的权限,并以此对用户进行身份验证。然后,经过身份验证的用户主体将包含角色。简单的例子:

© www.soinside.com 2019 - 2024. All rights reserved.