【问题标题】:Servicestack JWT UserAuth nullServicestack JWT UserAuth null
【发布时间】:2019-08-28 19:34:01
【问题描述】:

当使用邮递员的 JWT 时。我得到一个不记名令牌。但是从服务调用 UserAuth 时的所有请求都是空的。同样在我的自定义 AuthUSerSession 会话中为空。

我从身份验证设置中删除了 basicauth。贴在下面。并且它仍然通过基本身份验证,并且会话仍然为空。我想我错过了一些东西。有人可以帮帮我吗?

    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 = "/",
            });

【问题讨论】:

    标签: c# servicestack


    【解决方案1】:

    JWT's enables stateless authentication 不是将User Session 保留在服务器上(并由 cookie 引用),而是完全封装在 JWT 不记名令牌中。

    当您使用 JWT 身份验证时,您没有使用服务器会话,会话是从创建 JWT 承载令牌时的用户会话的快照创建的,即通​​常在身份验证时,或者当一个新的Bearer Token 是从 Refresh Token 中获取的。

    我不确定您为什么要尝试从 Session 实例中检索 Session?实例本身应包含由SessionAs&lt;T&gt;GetSession() API 从IRequest 或服务中检索到的会话,例如:

    public object Any(MyRequest request)
    {
       var session = SessionAs<CustomUserSession>();
    }
    

    从 JWT 创建的会话仅包含部分会话,JWT 文档展示了如何include additional info within a JWT payload

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 1970-01-01
      • 2018-05-21
      相关资源
      最近更新 更多