2017-05-30 124 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