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