如何使AdGroupAuthProvider与OrmLiteCacheClient一起使用?

时间:2019-05-20 09:31:09

标签: c# session active-directory servicestack sql-session-state

我希望最终用户可以访问该应用程序,而不管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表为空。

1 个答案:

答案 0 :(得分:0)

ServiceStack使用ICacheClientUser Sessions存储在普通session-based Auth Providers中,尽管它不会将会话持久化到IAuthWithRequest Providers中的缓存。

我对AdGroupAuthProvider不熟悉,但是如果它实现了IAuthWithRequest,则该请求将包含每个请求的身份验证,该身份验证是用来填充仅附加到请求且不持久保存在{ {1}}。