将 JWT 令牌与 dropwizard 一起使用?我已经有 db auth,但对使用令牌感到困惑
Posted
技术标签:
【中文标题】将 JWT 令牌与 dropwizard 一起使用?我已经有 db auth,但对使用令牌感到困惑【英文标题】:Using a JWT token with dropwizard? I already have db auth, but am confused about utilizing tokens 【发布时间】:2018-02-26 08:12:18 【问题描述】:我有以下用于 DB 身份验证的 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.";
这是一种简单的、经过身份验证的方法——而且效果很好……但是,假设我想让用户登录,然后获取他们可以用于未来请求的令牌,直到令牌过期……我会假设(如果我错了,请纠正我)我会做一些事情,比如拥有一个资源,它将获取凭据,然后在响应中返回令牌,以存储在客户端 - 这很好......但是如果我这样做,我以后将如何针对令牌进行身份验证?
【问题讨论】:
看起来 dropwizard 可能不支持这种行为?我在网上找不到任何关于该主题的有用信息,而且似乎没有人在这里发表评论? 【参考方案1】:您是对的——您将添加一个端点,一旦经过身份验证就会发出 JWT 令牌,然后注释您的其他受保护资源以使用 JWT 身份验证。
查看dropwizard-auth-jwt,它为 Dropwizard 添加了 JWT 支持。在他们的examples directory on Github 中有一个关于如何使用它的示例。
具体看SecuredResource类,它既可以发出令牌也可以验证它。
例如,您可以扩展您的 aliveSecure
方法来发布 JWT 令牌。
我创建了一个example project available at on Github,它使用基本身份验证来发布令牌,而@Roles
使用 JWT。
【讨论】:
啊,很酷 - 那么如果我需要它来处理角色会发生什么?我的计划是添加一个简单的身份验证过滤器,在那里验证我的 JWT,并以某种方式使用带有该 jwt 的“@RolesAllowed”注释来允许使用某些端点?这是可以做到的吗?我似乎在任何地方都找不到实际执行此操作的示例?似乎如果我想使用这样的令牌进行身份验证,我必须失去所有“@RolesAllowed”功能? 不,您仍然可以使用 RolesAllowed 注释。如果您稍等一下,我会看看是否可以稍后将示例上传到 Github。 这将非常有帮助 - 我看到的 dropwizard 的其余部分,我完全明白了 - 但是身份验证的东西让我难以置信(我让 db auth 工作没问题,但是得到了令牌,并且角色等工作,太奇怪了) @MickeyThreeSheds 我添加了一个示例项目。请参阅上面的答案。 Tnankyou - 再过一两天我不会再看这个例子了 - 但无论如何我都会将此标记为最佳答案,您的帮助太大了!以上是关于将 JWT 令牌与 dropwizard 一起使用?我已经有 db auth,但对使用令牌感到困惑的主要内容,如果未能解决你的问题,请参考以下文章