2014-08-28 15 views
6

Piszę usługę sieciową RESTful na grails, używając rest spring security api. Wszystko dobrze ... teraz chcę zalogować się do użytkownika przy rejestracji, istnieje akcja rejestracyjna, a na zakończenie rejestracji, chciałbym zalogować się do tego użytkownika. Znalazłem:: Zabezpieczenie wiosny REST - Ręczne uwierzytelnienie nowego użytkownika i uzyskanie tokenu dostępu

springSecurityService.reauthenticate(username) method 

ale to tylko logowanie użytkownika, ale nie tworzy tokenu dostępu w tabeli authentication_token.

Czy istnieje inny sposób na zalogowanie się i uzyskanie tokena dostępu dla tego użytkownika?

Odpowiedz

10

Wtyczka jest przeznaczona dla aplikacji, w których frontend (czysty klient HTML/JS używający na przykład AngularJS) jest oddzielony od backendu (aplikacja Grails). W takim scenariuszu backend musi odesłać frontendowi token dostępu, a frontend musi go jakoś przechowywać (zwykle przy użyciu lokalnej pamięci lub ciasteczek), aby przekazać go jako HTTP przy każdym kolejnym żądaniu.

można zrobić coś takiego w swoim kontrolerze:

class RegisterController { 

    def springSecurityService 
    def tokenGenerator 
    def tokenStorageService 

    def register() { 
     //do stuff 
     springSecurityService.reauthenticate(username) 
     String tokenValue = tokenGenerator.generateToken() 
     tokenStorageService.storeToken(tokenValue, springSecurityService.principal) 

     redirect url: "http://example.org/?access_token=${tokenValue}" 
    } 
} 

Następnie, nakładka może chwycić token z adresu URL i przekazać je na każdym kolejnym wniosku API.

+0

A co z "refresh_token" w tym przypadku? Jak uzyskać nowy token, gdy ten wygasa? Czy stary działa? – lealceldeiro