Bra*_*onG 25 .net authentication active-directory servicestack
我正在创建一个安全(SSL)公共服务,其中用户凭据驻留在Active Directory中.我想利用ServiceStack的身份验证,并阅读了wiki文章.我已经编写了代码来验证AD的用户凭据.我有几个问题.
更新2:我最终使用CredentialsAuthProvider制作了与AD集成的测试SS服务.然而,我的最终目标是在客户打电话时拥有1个api网站.所以基本上是SS MVC网站.
更新:
经过一些研究,SS正在考虑做一个可能在未来支持Windows身份验证的商业产品,这是我的理解.我在SS Google小组的mythz评论中读到了这一点.我问这个问题的原因是我的公司使用IWA构建内部应用程序并且在没有IWA的情况下采用SS MVC很难.我想我读过你可以在一个使用IWA的ASP.NET站点上托管SS MVC站点,但我还没有尝试过.
以下是Demis Bellot在Twitter上所说的话.可能可能,但需要更多的研究.
不是我调查过的东西,不再在Win/Active Directory中工作了.需要一些研发来查找/解决问题
我最终得到了一个与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;
}
}
Run Code Online (Sandbox Code Playgroud)
我还使用集成Windows身份验证(用于企业应用程序)连接ServiceStack,关键是要完全避免尝试将其与ServiceStack的AuthProviders集成,因为IWA的一般方法不处理应用程序代码中的凭据 - - 它由Web服务器处理.我做的是:
在IIS中配置站点/应用程序,以便Windows身份验证是唯一启用的选项.(不允许匿名访问.)这意味着IIS本身将处理未经身份验证的用户的质询 - 响应(HTTP 401/200)序列,并为您处理流程的身份验证部分.
将ServiceStack IHasRequestFilter(HTTP预请求过滤器)实现为属性(例如,[AdminOnly]).此过滤器的RequestFilter方法从HttpContext(HttpContext.User.Identity.Name)获取当前用户名,从存储库(可能是SQL数据库,平面文件等)查找它,使用ServiceStack ICacheClient(内存缓存,Redis等)缓存结果,并抛出如果未经授权,则为403 HttpError.
完成此操作后,所有必要的是将属性添加到所需的类或方法(将所需的身份验证/授权转换到服务管道中),并在我的AppHost实现中注册我想要的缓存提供程序,例如:
container.Register<ICacheClient>(new MemoryCacheClient() { FlushOnDispose = false });
Run Code Online (Sandbox Code Playgroud)
它工作得很漂亮.
| 归档时间: |
|
| 查看次数: |
3336 次 |
| 最近记录: |