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

Mic*_*eds 3 java authentication rest jwt dropwizard

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

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Hen*_*kvh 5

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

查看dropwizard-auth-jwt,它为 Dropwizard 添加了 JWT 支持。Github 上的示例目录中有一个关于如何使用它的示例。

具体看一下SecuredResource类,它既可以颁发令牌也可以验证它。

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

我在 Github 上创建了一个示例项目,它使用基本身份验证和@RolesJWT 来发行令牌。