2016-07-29 149 views
0

我正在使用Spring與oauth2發佈JWT令牌。 我有一個工作原型,我可以使用@PreAuthorize註解來達到我的目的。來自JWT的彈簧休息控制器的安全決策

// 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特性?

回答

0

的JWT令牌將在授權 HTTP標頭的特性,同時要求一樣,被送到

授權:承載{JWT令牌}

您可以訪問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庫,使用和有關,

我還有一個安全的決定採取

是你必須去,智威湯遜聲稱只包含它能做什麼,以及你需要做的授權,檢查用戶(令牌)是否有足夠的權限或訪問做特定的操作,它只能從你的最終目的,它的業務邏輯的一部分來完成。

+0

它的工作原理和一切都很清楚,謝謝! –