ServiceStack Jwt身份验证检查是否经过身份验证

时间:2017-05-30 18:50:01

标签: session authentication servicestack jwt

我需要允许匿名访问端点,但仍然检查用户是否经过身份验证,然后提供一些额外的数据。

使用[Authenticate]属性我可以使用

var session = SessionAs<AuthUserSession>();

然后session.IsAuthenticated

它工作正常,但没有[Authenticated]属性会话为空(使用新id生成新会话,并且所有道具都没有填充用户数据)

如果没有使用jwt令牌的请求[Authenticate] attibute检查用户是否经过身份验证?

1 个答案:

答案 0 :(得分:1)

JwtAuthProvider是一个IAuthWithRequest提供程序,它只验证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并调用其ConvertJwtToSession() API:

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