2017-05-30 123 views
1

我需要允許匿名訪問端點,但仍檢查用戶是否已通過身份驗證,然後再提供一些額外數據。ServiceStack Jwt身份驗證檢查是否已通過驗證

使用[授權]屬性我可以用

var session = SessionAs<AuthUserSession>(); 

然後session.IsAuthenticated

它工作得很好,但沒有[認證]屬性會是空的(新的會話與新的ID生成所有道具都沒有填充用戶數據)

如何檢查用戶是否沒有[認證] attibute與請求使用jwt令牌認證?

回答

1

JwtAuthProviderIAuthWithRequest提供器,其僅驗證JWT令牌,並且如果令牌無效返回適當的HTTP錯誤響應當需要認證所述請求,例如服務註釋時使用[Authenticate]屬性。如果服務不需要身份驗證,則IAuthWithRequest身份驗證提供程序和JWT承載令牌未經驗證,用戶會話不會自動填充。

但在最新v4.5.9 that's now on MyGet新的API已被添加到JWT AuthProvider能夠創建定製的JWT令牌,並將其轉換成用戶會話,具體可以從JWT令牌創建UserSession:

var session = JwtAuthProvider.CreateSessionFromJwt(base.Request); 

這是just a helper解決註冊JwtAuthProviderReader並調用其API ConvertJwtToSession()

var jwtProvider = (JwtAuthProviderReader) 
    AuthenticateService.GetAuthProvider(JwtAuthProviderReader.Name); 
var session = jwtProvider.ConvertJwtToSession(base.Request, base.Request.GetJwtToken()); 
+0

我使用asp.net的核心,並使用你提供的是代碼thows例外JwtAuthProvider線453.任何想法? – Roman

+0

base.Request.GetJwtToken();一片空白。我正在使用打字稿客戶端,所有罰款正如我提到的屬性。 – Roman

+0

@Roman您可以使用正在發送令牌的TypeScript客戶端請求來更新您的問題 – mythz