在ServiceStack会话cookie中使用ss-pid
,我正在尝试为给定唯一用户ID强制执行单个用户会话。
当用户登录时,我能够持久保存ServiceStack会话ID。
当用户Bearer Token过期并使用Refresh Token时,我想检查他们的会话ID是否与我的持久性中的内容相对应,如果用户有新的会话ID则抛出异常,登录不同的设备等。
我的问题是,我没有看到使用ServiceStack框架获取访问令牌请求中包含的当前ss-pid
值的方法。我看到来自具有RefreshToken的API的access-token
请求在请求中包含ss-pid
cookie:
我已实施IUserSessionSource
,文档here,以便对BearerToken进行水合,并且该方法仅接收userAuthId
。
我查看了IAuthProvider
中的其他可用方法,但未调用IsAuthorized
。我认为Validate
中的AuthUserSession
可以帮助我缩短授权,但该方法似乎不再是AuthUserSession
的一部分,而且documentation中的签名是反正不是虚拟的:
IHttpResult Validate(IServiceBase authService, IAuthSession session,
IAuthTokens tokens, Dictionary<string, string> authInfo);
如何从访问令牌请求中获取ss-pid
,以便根据自定义逻辑短路请求?
------------------ UPDATE -------------------- < / p>
我找到了这种方法来获取ss-pid
:
public IAuthSession GetUserSession(string userAuthId)
{
IRequest req = HostContext.TryGetCurrentRequest();
IAuthSession session = req.GetSession();
}
我想这是合适的,而不是一个hacky解决方案?
答案 0 :(得分:0)
AuthUserSession are virtual上的所有方法。
JWT's are stateless,他们的会话封装在JWT BearerToken中。我不会尝试添加您自己的会话cookie,因为它与从JWT BearerToken提取的会话冲突。如果要在身份验证上保存元数据,请使用自己的模型将其保存在缓存或数据库中,而不是在使用无状态Auth Provider(如JWT)时尝试创建自己的UserSession。