将 JWT 令牌与 dropwizard 一起使用?我已经有 db auth,但对使用令牌感到困惑

Using a JWT token with dropwizard? I already have db auth, but am confused about utilizing tokens

我有以下 Authenticator class 用于数据库身份验证:

public class DBAuthentication implements Authenticator<BasicCredentials, User> {

    private UserDAO userDAO;

    public DBAuthentication(UserDAO userDAO) {
        this.userDAO = userDAO;
    }

    @Override
    public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException{
       return userDAO.findByUsernamePassword(credentials.getUsername(), credentials.getPassword());
    }
}

然后当我想针对资源进行身份验证时,我只需执行以下操作:

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/secured")
@UnitOfWork
public String aliveSecure(@Auth User user)
{
    return "working.";
}

这是一个简单的、经过身份验证的方法 - 并且效果很好...但是,假设我想让用户登录,然后获得一个令牌,他们可以将其用于未来的请求,直到令牌过期。 .我会假设(如果我错了就纠正我)我会做一些事情,比如拥有一个资源,它将获取凭证,然后 return 响应中的令牌,用于存储在客户端 - 然后很好...但是如果我这样做,我以后将如何根据令牌进行身份验证?

你是对的——你将添加一个端点,它在经过身份验证后发出 JWT 令牌,然后注释你的其他受保护资源以使用 JWT 身份验证。

查看 dropwizard-auth-jwt, which adds JWT support to Dropwizard. There is an example on how to use it in their examples directory on Github

具体看SecuredResourceclass,既可以签发token,又可以验证

例如,您可以只扩展 aliveSecure 方法来发布 JWT 令牌。

我制作了一个 example project available at on Github,它使用基本身份验证来颁发令牌,@Roles 使用 JWT。