首页 > 解决方案 > 如何让 AdGroupAuthProvider 与 OrmLiteCacheClient 一起工作?

问题描述

我希望最终用户可以访问该应用程序,无论 LoadBalancer 重定向哪个服务器节点。所以,我想使用 OrmLiteCacheClient 在 MSSQL DB 中存储会话。

我有以下代码(只有部分 SetupPlugins):

private void SetupPlugins (Container container)
{
    //Register OrmLite Db Factory if not already
    container.Register<IDbConnectionFactory>(c =>
        new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider));

    container.RegisterAs<OrmLiteCacheClient, ICacheClient>();

    //Create 'CacheEntry' RDBMS table if it doesn't exist already
    container.Resolve<ICacheClient>().InitSchema();

    container.Register<IAuthRepository>(c =>
        new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));

    container.Resolve<IAuthRepository>().InitSchema();

    Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
        new AdGroupAuthProvider(container.Resolve<IActiveDirectoryAuthHelper>(),
        GlobalConfiguration.Instance.AllowedActiveDirectoryGroup)
    }));       
}

internal class AdGroupAuthProvider : BasicAuthProvider
{
    private readonly IActiveDirectoryAuthHelper _adLoggingHelper;
    private readonly string _loggedUserAdGroup;

    public AdGroupAuthProvider(IActiveDirectoryAuthHelper loggingHelper,     string loggedUserAdGroup)
    {
        _adLoggingHelper = loggingHelper;
        _loggedUserAdGroup = loggedUserAdGroup;
    }
    public override bool Authenticate(IServiceBase loggingServiceBase,     string userName, string password)
    {
        return _adLoggingHelper.HasUserAssignedGroup(userName, password, _loggedUserAdGroup);
    }
 }
}

如何让 AdGroupAuthProvider 与 OrmLiteCacheClient 一起工作?上面的程序构建,我可以进行身份​​验证。但是,CacheEntry MSSQL 表是空的。

标签: c#sessionactive-directoryservicestacksql-session-state

解决方案


ServiceStack 用于ICacheClient用户会话存储在普通的基于会话的 Auth Providers中,尽管它不会将 Sessions 保存到IAuthWithRequest Providers中的缓存中。

我不熟悉,AdGroupAuthProvider但如果它实现IAuthWithRequest请求包含每个请求的身份验证,这是用于填充会话的内容,该会话仅附加到请求而不是持久化在ICacheClient.


推荐阅读