JAX-RS Jersey servlet JJWT

时间:2016-07-27 21:02:42

标签: jax-rs token jwt jjwt

我在几个问题后有几天但我找不到解决方案。

我已经关注了这些问题:Custom JAX-RS authorization - using JWT in each request

Best practice for REST token-based authentication with JAX-RS and Jersey

但我不明白如何使用过滤器。

我需要为Android应用程序创建令牌使用我的Web服务的资源。

我不能只创建一个令牌并发送它吗?

我正在使用jjwt https://github.com/jwtk/jjwt,但我认为这是一段代码:

       @POST
       @Produces("application/json")
       @Consumes("application/x-www-form-urlencoded")
       public Response authenticateUser(@FormParam("username") String username, 
                                 @FormParam("password") String password) {

    try {

        // Authenticate the user using the credentials provided
       // authenticate(username, password);

        // Issue a token for the user
        String compactJws = Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, "pepe").compact();

        // Return the token on the response
        return Response.ok(compactJws).build();

    } catch (Exception e) {
        return Response.status(Response.Status.UNAUTHORIZED).build();
    }      
}

如果有人可以帮助我,谢谢...

Si alguno me puede responder en castellano,mejor。

PD:对不起,如果我提出错误的问题,我会在堆叠中重新开始......对不起我的英文

2 个答案:

答案 0 :(得分:0)

您提供的代码对于Web应用程序的新令牌(使用application/x-www-form-urlencoded)有效,但对于Android应用程序可能更适合将凭据作为json POST或Authorization标头发送

在此之后,客户端应用程序接收令牌,存储它并需要在每个服务器请求中包含JWT。您可以在标头或请求参数中包含令牌。服务器必须验证令牌签名以及其他字段,如sub(userId)和exp(到期时间)。

使用过滤器(如示例中提供的AuthenticationFilter)可简化身份验证过程。它可以拦截所有请求并在唯一的点上执行验证。如果没有,则必须在业务逻辑的每种方法中验证JWT

如果您对如何配置过滤器有疑问,我建议在SO中发布特定问题

答案 1 :(得分:0)

我是answer about token-based authentication in JAX-RS的作者。此身份验证方法可以通过以下步骤进行总结:

交换令牌的硬凭证

不需要过滤器。您应该有一个端点(JAX-RS资源方法)来使用硬凭证(如用户名和密码)执行身份验证。如果凭据有效,则端点将发出将在响应有效负载中发送到客户端的令牌。客户端必须在每个请求的Authorization标头中发送此令牌。

颁发令牌的端点不得受到保护,也就是说,访问它所必需的身份验证不是必需的。一旦您将Android应用程序作为客户端,我认为您会发现更好的消费application/json而不是application/x-www-form-urlencoded。我的answer提供了有关如何操作的详细信息。

验证令牌

此处验证过滤器发挥作用。使用过滤器验证令牌时,您可以保持端点的精益和业务重点。

过滤器背后的想法是拦截对受保护资源的请求,从Authorization标头中提取令牌并对其进行验证。如果令牌有效,请求将前进到请求的端点。如果令牌无效,请求将被中止。

除了身份验证过滤器之外,您还可以使用其他过滤器来执行授权。在身份验证过滤器中,您必须检查令牌是否有效,然后找到您为其颁发令牌的用户。在授权过滤器中,您必须确保用户具有足够的权限来访问所请求的资源。可以根据您的需要创建其他过滤器。