我创建一个安全(SSL)的公共服务,其中用户凭据驻留在Active Directory中。 我想利用ServiceStack的认证,并已阅读过维基文章 。 我已经编写的代码验证与AD用户凭据。 我有几个问题。
- 我该使用哪个提供商验证? 凭据,基本认证或自定义? 该服务需要SSL所以基本认证将是安全的,但密码会增加安全性加密。
- 我仍然需要存储USERAUTH和缓存AuthUserSession?
- 请问MonoTouch的客户端支持的认证?
更新2:我没有最终作出与AD集成,使用CredentialsAuthProvider测试SS服务。 但是我的最终目标,它有1个网站,这是一个API,当客户端调用。 所以基本上一个SS MVC的网站。
更新:
它是做一些SS是考虑这样做可以支持Windows身份验证在未来的商业产品进行更多的研究后,我的理解。 我从mythz对SS谷歌组评论阅读。 我问这个的原因SO问题是,我公司建立使用IWA,采用SS MVC是很难不IWA内部应用程序。 我觉得我读你可能主持SS MVC网站关闭使用IWA一个ASP.NET网站,但我还没有试过呢。
我也迷上了ServiceStack具有集成的Windows身份验证(企业应用程序),关键是要跳过试图把它与完全ServiceStack的AuthProviders整合,因为IWA的一般方法不会在应用程序代码证书处理 - - 它是由Web服务器处理。 我所做的是:
在IIS中配置网站/应用程序,以便Windows身份验证是唯一的选项启用。 (没有匿名访问不允许的。)这意味着IIS本身会照顾质询响应(HTTP二百分之四百○一)与未授权的用户序列,并为您处理过程的认证部分。
实施ServiceStack的IHasRequestFilter
(一个HTTP请求前过滤器)作为属性(例如,[AdminOnly])。 该过滤器的RequestFilter方法获取从HttpContext的当前用户名( HttpContext.User.Identity.Name
),看起来它从一个仓库了(这可能是一个SQL数据库,平面文件等),使用ServiceStack的缓存结果ICacheClient
(内存缓存, Redis的,等等),并抛出一个403 HttpError如果未经授权的。
有了这个做,一切是必然的,添加属性到所需的类和方法(它得到这个认证/授权到服务管道需要时),并注册我要的缓存提供者在我APPHOST实现,例如:
container.Register<ICacheClient>(new MemoryCacheClient() { FlushOnDispose = false });
它精美的作品。
这里是杰米斯贝洛特说上叽叽喳喳 。 也许可能,但需要更多的研究。
不是我调查过,不要在赢/ 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?