我需要允许匿名访问端点,但仍然检查用户是否经过身份验证,然后提供一些额外的数据。
使用[Authenticate]属性我可以使用
var session = SessionAs<AuthUserSession>();
然后session.IsAuthenticated
它工作正常,但没有[Authenticated]属性会话为空(使用新id生成新会话,并且所有道具都没有填充用户数据)
如果没有使用jwt令牌的请求[Authenticate] attibute检查用户是否经过身份验证?
答案 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());