2013-05-21 53 views
5

如何使用ServiceStack實現以下方案?如何使用ServiceStack進行基於令牌的身份驗證

初始請求轉到具有這樣限定的授權報頭http://localhost/auth

Authorization: Basic skdjflsdkfj=

的IAuthProvider執行驗證對用戶存儲和返回會話令牌作爲響應體(JSON)。

客戶端使用此令牌的重新發送它反對使用認證頭這樣像http://localhost/json/reply/orders後續請求:

Authorization: BasicToken <TokenFromPreviousSuccessfulLogin>

使用AuthenticateAttribute我想我旗服務使用身份驗證。

我應該如何爲隨後的請求實現令牌驗證? 我應該如何實施IAuthProvider來提供令牌? 我將如何註冊供應商等?使用RequestFilters或使用AuthFeature

回答

7

ServiceStack的JWT AuthProviderAPI Key AuthProvider都使用基於令牌的身份驗證。

否則BasicAuth Provider是一個非常簡單的類,簡單地提取從基本驗證頭部得到用戶名和密碼,並對其進行評估:

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); 
} 

如果要提供增強的行爲,我想簡單地繼承這個類檢查Authorization: BasicToken標題,如果它存在使用否則調用base.Authenticate(...)方法來執行初始驗證。

+0

感謝您的回覆。這個問題是針對[這裏]描述的情況(http://stackoverflow.com/questions/16690758/alternative-to-cookie-based-session-authentication)。 –

+0

@mythz我一直在努力做到這一點,但是你不能在基類上設置提供者名稱或領域,因爲BasicAuthProvider不允許你在構造函數中設置它們。 – Junto

+0

@Junto你是什麼意思[不允許你在構造函數中設置它們](https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/BasicAuthProvider.cs#L14) ? – mythz

相關問題