当我通过JWT进行身份验证时,这在Postman的baseservice中的SessionAs上失败。但是,当我使用基本身份验证时,它可以正常工作。有人知道为什么吗?
Apphost
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)
})
{
BaseService 公共类ServiceBase:服务 {
public IUserAuth UserAuth
{
get
{
var session = SessionAs<AuthUserSession>();
return AuthRepository.GetUserAuth(session.UserAuthId);
}
}
}
答案 0 :(得分:1)
您的SessionAs<T>
必须与AuthFeature
插件CustomUserSession
中注册的UserSession类型相匹配。
ServiceStack's JwtAuthProvider会在JWT的UserAuthId
JWT有效负载中填充sub
,因此您应该检查原始HTTP标头,以确保正在HTTP的{{1}中发送JWT令牌。 }标头作为BearerToken或在Authorization
Cookie中。如果正在发送,则您对在https://jwt.io中发送的JWT进行解码,以确保它包含有效的有效负载,在这种情况下,它在JWT有效负载中包含一个ss-tok
属性,其中用户正在通过身份验证。