servicestack,Jwt,servicestack" /> servicestack,Jwt,servicestack" />

Servicestack会话仅在使用JWT时为空

Servicestack会话仅在使用JWT时为空,jwt,servicestack,Jwt,servicestack,当我通过JWT进行身份验证时,这在Postman中的baseservice中的SessionAs上失败。但是当我使用Basic Auth时,它工作得很好。有人知道为什么吗 应用主机 Plugins.Add(new AuthFeature(() => new CustomUserSession(), new IAuthProvider[] { new BasicAuthProvider(),

当我通过JWT进行身份验证时,这在Postman中的baseservice中的SessionAs上失败。但是当我使用Basic Auth时,它工作得很好。有人知道为什么吗

应用主机

    Plugins.Add(new AuthFeature(() => new CustomUserSession(),
        new IAuthProvider[]
        {
            new BasicAuthProvider(),                    //Sign-in with HTTP Basic Auth
            new JwtAuthProvider(AppSettings) {
                AuthKeyBase64 = AppSettings.GetString("jwt.auth.key"),
                RequireSecureConnection = false,
                }, //JWT TOKENS
            new CredentialsAuthProvider(AppSettings)
        })
    {
基本服务 公共类ServiceBase:服务 {

        public IUserAuth UserAuth
        {
            get
            {
                var session = SessionAs<AuthUserSession>();
                return AuthRepository.GetUserAuth(session.UserAuthId);   
            }
        }

    }
public IUserAuth UserAuth
{
得到
{
var session=SessionAs();
返回AuthRepository.GetUserAuth(session.UserAuthId);
}
}
}
您的
会话
需要匹配
AuthFeature
插件中注册的用户会话类型,该插件是
CustomUserSession

在JWT的
sub
JWT有效负载中填充
UserAuthId
,因此您应该检查原始HTTP头以确保JWT令牌正在被发送,无论是在HTTP的
Authorization
头中作为BearerToken还是在
ss-tok
Cookie中。如果正在发送,则对发送的JWT进行解码,以确保其包含有效的负载,在这种情况下,JWT负载中包含一个
“sub”
属性,该属性包含正在验证的用户的
UserAuthId