使用带有dropwizard的JWT令牌?我已经有了db auth,但对使用令牌很困惑

时间:2017-09-17 19:57:30

标签: java rest authentication 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());
    }
}

然后当我想对资源进行身份验证时,我只是这样做:

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

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

1 个答案:

答案 0 :(得分:2)

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

查看dropwizard-auth-jwt,它为Dropwizard添加了JWT支持。有关如何在examples directory on Github中使用它的示例。

具体来看SecuredResource类,它既可以发出令牌也可以验证它。

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

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