将 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,但对使用令牌感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JWT 与 grpc 一起使用?

将 JWT 与 Ktor 一起使用并在声明中包含用户信息

将 JwtSecurityToken 与 HttpClient 一起使用

JWT令牌生成与校验

在 MVC 中使用 OAuth 持有者令牌 (JWT)

jwt 令牌授权无法与自定义角色一起正常工作