来自 Spring Rest 控制器中 JWT 的安全决策
Posted
技术标签:
【中文标题】来自 Spring Rest 控制器中 JWT 的安全决策【英文标题】:security decision from a JWT in a spring rest controller 【发布时间】: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 功能?
【问题讨论】:
【参考方案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声称只包含它可以做的事情,你需要做授权,检查用户(令牌)是否有足够的权限或访问权限来做特定的操作,并且必须从你那里完成只是,它是业务逻辑的一部分。
【讨论】:
以上是关于来自 Spring Rest 控制器中 JWT 的安全决策的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Boot 和 JWT 保护 REST Api
使用 Spring 安全性和 JWT 在 REST 中使用 <img> 标签访问私有图像
Spring REST-JWT-JavaScript 在安全页面之间导航
Spring(Websockets / REST / Security)、JWT 和 Sockjs(Stomp)集成