2013-05-21 19 views
5

Jak zaimplementować następujący scenariusz przy użyciu ServiceStack?Jak wykonać uwierzytelnianie na podstawie tokena przy użyciu ServiceStack

żądanie początkowe idzie http://localhost/auth mające nagłówek Authorization zdefiniowane tak:

Authorization: Basic skdjflsdkfj=

Realizacja IAuthProvider sprawdza przeciwko magazynu użytkownika i zwraca token sesji jako organu odpowiedzi (JSON).

Klient wykorzystuje ten token ponownie wysyła go na kolejnych wniosków jak http://localhost/json/reply/orders wykorzystujących nagłówek Authorization tak:

Authorization: BasicToken <TokenFromPreviousSuccessfulLogin>

Korzystanie z AuthenticateAttribute Chcę flagą mojej służby w użyciu uwierzytelniania.

Jak wdrożyć weryfikację tokenu dla kolejnych żądań? Jak wdrożyć IAuthProvider, aby dostarczyć token? Jak mogę zarejestrować Dostawców itp.? Korzystanie z funkcji RequestFilters lub korzystanie z AuthFeature?

Odpowiedz

7

Obie usługi ServiceStack: JWT AuthProvider i API Key AuthProvider używają uwierzytelniania opartego na tokenach.

Inaczej BasicAuth Provider jest bardzo prosta klasa, która po prostu pobiera nazwę użytkownika i hasło z BasicAuth Nagłówek i ocenia go:

public override object Authenticate(...) 
{ 
    var httpReq = authService.RequestContext.Get<IHttpRequest>(); 
    var basicAuth = httpReq.GetBasicAuthUserAndPassword(); 
    if (basicAuth == null) 
     throw HttpError.Unauthorized("Invalid BasicAuth credentials"); 

    var userName = basicAuth.Value.Key; 
    var password = basicAuth.Value.Value; 

    return Authenticate(authService, session, userName, password, request.Continue); 
} 

Jeśli chcesz, aby zapewnić zwiększoną zachowanie, ja po prostu odziedziczyć tej klasy czek na nagłówek Authorization: BasicToken, jeśli istnieje, należy użyć metody base.Authenticate(...), aby wykonać wstępną walidację.

+0

Dzięki za odpowiedź. Pytanie dotyczyło scenariuszy opisanych [tutaj] (http://stackoverflow.com/questions/16690758/alternative-to-cookie-based-session-authentication). –

+0

@mythz Próbowałem zrobić dokładnie to, ale nie można ustawić nazwy dostawcy lub dziedziny na klasie bazowej, ponieważ BasicAuthProvider nie pozwala ustawić ich w konstruktorze. – Junto

+0

@Joja co przez to rozumiesz [nie pozwala ustawić ich w konstruktorze] (https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/BasicAuthProvider.cs#14) ? – mythz

Powiązane problemy