多个AuthProvider Servicestack

时间:2017-11-15 13:13:09

标签: servicestack

我有一些问题要同时为servicestack工作2 auth提供程序。 我正在使用: JWT令牌 - 允许用户使用JWT令牌进行身份验证我是我的用户获得正确的身份验证。

现在我还想使用 API密钥 - 允许用户通过API密钥进行身份验证,以便为少数外部第三方用户提供访问权限。

当我配置我的两个用户时,JWT Tokens的身份验证已经完成了。

这是我的配置AuthProvider配置:

        IAuthProvider[] providers = new IAuthProvider[]
        {
            new JwtAuthProviderReader(this.AppSettings)
            {
                HashAlgorithm = "RS256",
                PrivateKeyXml = this.AppSettings.GetString("TokenPrivateKeyXml"),
                PublicKeyXml = this.AppSettings.GetString("TokenPublicKeyXml"),
                RequireSecureConnection = this.AppSettings.Get<bool>("TokenUseHttps"),
                EncryptPayload = this.AppSettings.Get<bool>("TokenEncryptPayload"),
                PopulateSessionFilter = (session, obj, req) =>
                {
                    ApplicationUserSession customSession = session as ApplicationUserSession;
                    if (customSession != null)
                    {
                        customSession.TimeZoneName = obj["TimeZoneName"];
                        customSession.Type =  (FbEnums.UserType) (obj["UserType"].ToInt());
                        if (Guid.TryParse(obj["RefIdGuid"], out Guid result))
                        {
                            customSession.RefIdGuid = result;
                        }
                    }
                },
            },
            new ApiKeyAuthProvider(AppSettings)
            {
                RequireSecureConnection = false
            }

        };

我正在用JwtAuth打造令牌。仍然看起来servicestack不接受我的令牌作为有效会话,因为现在每当我这样做时:

var session = httpReq.GetSession();

session.IsAuthenticated - &gt;总是假的

如果我从配置中删除了 ApiKeyAuthProvider ,那么来自JwtAuth的令牌再次正常工作。

如何让两个提供者一起工作并告诉servicestack tham一些用户将使用JwtAuth和其他人ApiKeyAuth?

1 个答案:

答案 0 :(得分:1)

您需要拨打需要身份验证的服务,例如具有[Authenticate]属性,以便为{JWT和API Key AuthProviders等IAuthWithRequest提供程序触发预身份验证。