Servicestack JWT UserAuth null
Servicestack JWT UserAuth null
从 postman 使用 JWT 时。我得到一个不记名令牌。但是从服务调用 UserAuth 时的所有请求都是空的。同样在我的自定义 AuthUSerSession 会话中为空。
我从身份验证设置中删除了 basicauth。贴在下面。并且它仍然使用 basic 进行身份验证并且会话仍然为空。我想我错过了什么。有人可以帮我吗?
public class CustomUserSession : AuthUserSession
{
public override bool IsAuthorized(string provider)
{
string sessionKey = SessionFeature.GetSessionKey(this.Id);
var cacheClient = HostContext.TryResolve<ICacheClient>();
CustomUserSession session = cacheClient.Get<CustomUserSession>(sessionKey);
if (session == null)
{
return false;
}
return session.IsAuthenticated;
}
}
//我的授权设置
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[]
{
new JwtAuthProvider(AppSettings) {
CreatePayloadFilter = (payload,session) =>
payload["CreatedAt"] = session.CreatedAt.ToUnixTime().ToString(),
InvalidateTokensIssuedBefore = DateTime.Now,
SetBearerTokenOnAuthenticateResponse = true,
AuthKeyBase64 = AppSettings.GetString("jwt.auth.key"),
RequireSecureConnection = false,
}, //JWT TOKENS
new CredentialsAuthProvider(AppSettings)
})
{
HtmlRedirect = "/",
});
JWT's enables stateless authentication where instead of the User Session 持久保存在服务器上(并由 cookie 引用),它完全封装在 JWT Bearer Token 中。
当您使用 JWT Auth 时,您没有使用服务器会话,会话是在创建 JWT Bearer Token 时从用户会话的快照创建的,即通常在身份验证时,或者当从刷新令牌中检索到新的不记名令牌。
我不确定您为什么要尝试从 Session 实例中检索 Session?实例本身应包含由 SessionAs<T>
或 GetSession()
API 从 IRequest
或服务中检索的会话,例如:
public object Any(MyRequest request)
{
var session = SessionAs<CustomUserSession>();
}
从 JWT 创建的会话仅包含部分会话,JWT 文档展示了如何 include additional info within a JWT payload。
从 postman 使用 JWT 时。我得到一个不记名令牌。但是从服务调用 UserAuth 时的所有请求都是空的。同样在我的自定义 AuthUSerSession 会话中为空。
我从身份验证设置中删除了 basicauth。贴在下面。并且它仍然使用 basic 进行身份验证并且会话仍然为空。我想我错过了什么。有人可以帮我吗?
public class CustomUserSession : AuthUserSession
{
public override bool IsAuthorized(string provider)
{
string sessionKey = SessionFeature.GetSessionKey(this.Id);
var cacheClient = HostContext.TryResolve<ICacheClient>();
CustomUserSession session = cacheClient.Get<CustomUserSession>(sessionKey);
if (session == null)
{
return false;
}
return session.IsAuthenticated;
}
}
//我的授权设置
Plugins.Add(new AuthFeature(() => new CustomUserSession(),
new IAuthProvider[]
{
new JwtAuthProvider(AppSettings) {
CreatePayloadFilter = (payload,session) =>
payload["CreatedAt"] = session.CreatedAt.ToUnixTime().ToString(),
InvalidateTokensIssuedBefore = DateTime.Now,
SetBearerTokenOnAuthenticateResponse = true,
AuthKeyBase64 = AppSettings.GetString("jwt.auth.key"),
RequireSecureConnection = false,
}, //JWT TOKENS
new CredentialsAuthProvider(AppSettings)
})
{
HtmlRedirect = "/",
});
JWT's enables stateless authentication where instead of the User Session 持久保存在服务器上(并由 cookie 引用),它完全封装在 JWT Bearer Token 中。
当您使用 JWT Auth 时,您没有使用服务器会话,会话是在创建 JWT Bearer Token 时从用户会话的快照创建的,即通常在身份验证时,或者当从刷新令牌中检索到新的不记名令牌。
我不确定您为什么要尝试从 Session 实例中检索 Session?实例本身应包含由 SessionAs<T>
或 GetSession()
API 从 IRequest
或服务中检索的会话,例如:
public object Any(MyRequest request)
{
var session = SessionAs<CustomUserSession>();
}
从 JWT 创建的会话仅包含部分会话,JWT 文档展示了如何 include additional info within a JWT payload。