【问题标题】:security decision from a JWT in a spring rest controller来自 Spring Rest 控制器中 JWT 的安全决策
【发布时间】:2016-12-04 08:15:07
【问题描述】:

我将 Spring 与释放 JWT 令牌的 oauth2 一起使用。 我有一个工作原型,我可以在其上使用 @PreAuthorize 注释。

// public class Foo { private String md5Hash; } with getters, setters, etc.

@RestController
@RequestMapping("/foo")
public class WebController {

    @PreAuthorize("hasAnyAuthority('client','module')")
    @RequestMapping(method = RequestMethod.GET)
    public String readFoo(Foo foo) {
        String username = /* extract jwt info */
        if (verify(username, foo.getMd5Hash())) 
             return "you CAN'T";
        return "you can";
    }

    boolean verify(String user, String md5) {...}

在 JWT 令牌中定义了用户名。 如何从这里读取用户名?

此外,如您所见,我还有另一个安全决定要采取...这是一个好方法还是有一些我不知道的 Spring 功能?

【问题讨论】:

    标签: spring spring-mvc spring-security oauth-2.0 jwt


    【解决方案1】:

    JWT 令牌将在 Authorization http 标头属性中发送,同时请求类似,

    授权:承载 {jwt-token}

    您可以在请求映射中访问 http 标头,例如,

    @PreAuthorize("hasAnyAuthority('client','module')")
    @RequestMapping(method = RequestMethod.GET)
    public String readFoo(Foo foo, @RequestHeader(value="Authorization") String bearerToken) {
        // you can use any JWT libraries return object version of jwt
        String username = extractJwtToken(bearerToken);
    }
    

    查看此站点https://jwt.io/,以了解可用的 Java 库以供使用和了解,

    我要做出另一个安全决定

    是的,你必须这样做,JWT声称只包含它可以做的事情,你需要做授权,检查用户(令牌)是否有足够的权限或访问权限来做特定的操作,并且必须从你那里完成只是,它是业务逻辑的一部分。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2016-09-18
      • 2017-01-07
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 2020-07-14
      • 2016-05-28
      • 2016-12-10
      相关资源
      最近更新 更多