仅当使用JWT时,Servicestack会话为null

时间:2019-02-19 05:51:31

标签: jwt servicestack

当我通过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);   
            }
        }

    }

1 个答案:

答案 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属性,其中用户正在通过身份验证。