2016-07-29 1 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 в запросе Mapping как ,

@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 претензий содержит только то, что он может сделать, и вам нужно сделать авторизацию, проверку, имеет ли пользователь (маркер) достаточно привилегий или доступа выполнять определенные операции, и это нужно делать только с вашего конца, его часть бизнес-логики.

+0

Это работает, и все ясно, спасибо! –

Смежные вопросы