首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAX-RS泽西servlet JJWT

JAX-RS泽西servlet JJWT
EN

Stack Overflow用户
提问于 2016-07-27 21:02:41
回答 2查看 1.2K关注 0票数 0

我有几天时间在几个问题之后,但我找不到解决办法。

我跟踪了这些问题: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,但我认为它是正确的,一段代码:

代码语言:javascript
复制
       @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();
    }      
}

如果有人能帮我,谢谢..。

我是卡斯特拉诺的接待员。

抱歉,如果我问错了,我是新来的.为我的英语道歉

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 08:26:17

我是answer about token-based authentication in JAX-RS的作者。此身份验证方法可归纳为以下步骤:

用硬凭据交换令牌

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

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

验证令牌

在这里,身份验证过滤器起作用。当使用过滤器验证令牌时,您可以保持端点的简洁性和业务重点。

过滤器背后的思想是拦截对受保护资源的请求,从Authorization头中提取令牌并验证它。如果令牌有效,则请求将继续到请求的端点。如果令牌无效,请求将被中止。

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

票数 0
EN

Stack Overflow用户

发布于 2016-07-28 07:57:38

您所提供的代码对于为web应用程序发出新令牌(使用application/x-www-form-urlencoded)是有效的,但对于安卓应用程序来说,可能更适合将凭据作为json或在授权头中发送。

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

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

如果您对如何配置过滤器有疑问,我建议您提交一个特定的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38623132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档