如何使用Servicestack身份验证与Active Directory / Windows身份验

2019-08-01 22:36发布

我创建一个安全(SSL)的公共服务,其中用户凭据驻留在Active Directory中。 我想利用ServiceStack的认证,并已阅读过维基文章 。 我已经编写的代码验证与AD用户凭据。 我有几个问题。

  1. 我该使用哪个提供商验证? 凭据,基本认证或自定义? 该服务需要SSL所以基本认证将是安全的,但密码会增加安全性加密。
  2. 我仍然需要存储USERAUTH和缓存AuthUserSession?
  3. 请问MonoTouch的客户端支持的认证?

更新2:我没有最终作出与AD集成,使用CredentialsAuthProvider测试SS服务。 但是我的最终目标,它有1个网站,这是一个API,当客户端调用。 所以基本上一个SS MVC的网站。

更新:

它是做一些SS是考虑这样做可以支持Windows身份验证在未来的商业产品进行更多的研究后,我的理解。 我从mythz对SS谷歌组评论阅读。 我问这个的原因SO问题是,我公司建立使用IWA,采用SS MVC是很难不IWA内部应用程序。 我觉得我读你可能主持SS MVC网站关闭使用IWA一个ASP.NET网站,但我还没有试过呢。

Answer 1:

我也迷上了ServiceStack具有集成的Windows身份验证(企业应用程序),关键是要跳过试图把它与完全ServiceStack的AuthProviders整合,因为IWA的一般方法不会在应用程序代码证书处理 - - 它是由Web服务器处理。 我所做的是:

  1. 在IIS中配置网站/应用程序,以便Windows身份验证是唯一的选项启用。 (没有匿名访问不允许的。)这意味着IIS本身会照顾质询响应(HTTP二百分之四百○一)与未授权的用户序列,并为您处理过程的认证部分。

  2. 实施ServiceStack的IHasRequestFilter (一个HTTP请求前过滤器)作为属性(例如,[AdminOnly])。 该过滤器的RequestFilter方法获取从HttpContext的当前用户名( HttpContext.User.Identity.Name ),看起来它从一个仓库了(这可能是一个SQL数据库,平面文件等),使用ServiceStack的缓存结果ICacheClient (内存缓存, Redis的,等等),并抛出一个403 HttpError如果未经授权的。

有了这个做,一切是必然的,添加属性到所需的类和方法(它得到这个认证/授权到服务管道需要时),并注册我要的缓存提供者在我APPHOST实现,例如:

 container.Register<ICacheClient>(new MemoryCacheClient() { FlushOnDispose = false });

它精美的作品。



Answer 2:

这里是杰米斯贝洛特说上叽叽喳喳 。 也许可能,但需要更多的研究。

不是我调查过,不要在赢/ Active Directory的工作了。 需要一些R&d找到/解决问题

我最终得到了一个原型服务与AD工作。 我实现了CredentialsAuthProvider。 现在,这是不依赖于ASP.NET IWA可言,但它很容易地检查,看看用户在AD。 希望这可以帮助别人。

public class LDAPAuthProvider : CredentialsAuthProvider
{
    public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
                    {
                        //Check to see if the username/password combo is valid, an exception will be thrown if the username or password is wrong
                        try
                        {
                            DirectoryEntry entry = new DirectoryEntry(ConfigurationManager.AppSettings["TargetOU"], userName, password);
                            object nativeObject = entry.NativeObject;
                        }
                        catch (Exception)
                        {
                            //This means the username/password combo failed
                            return false;
                        }

                        return true;
                    }
}


文章来源: How to use Servicestack Authentication with Active Directory/Windows Authentication?