如何通过表单在 ASP.NET Web API 中实施 Active Directory 身份验证?

How to Implement Active Directory Authentication in ASP.NET Web API Through Forms?

我已经阅读了很多 guides/articles 但还没有找到完全符合我要求的...那就是在 ASP.NET Web API 通过表格。

本指南中的类似内容:

Cool MVC 5 guide to implement authentication with Active Directory

这非常好,但它是针对 MVC 的,即它使用的是 Controller 而不是 ApiController

有人可以告诉我 hints/tips/articles 如何开始吗?特别是关于连接到活动目录的部分。我已经坚持了一段时间。

更新:

public bool IsAuthenticatedUser(string srvr, string usr, string password)
       {
           bool authenticated = false;

           try {
               DirectoryEntry entry = new DirectoryEntry(srvr, usr, password);
               object nativeObject = entry.NativeObject;
               Object obj = entry.NativeObject;
               authenticated = true;
           }
           catch {
               throw new HttpResponseException(HttpStatusCode.Unauthorized);
           }
           return authenticated;
       }

       // POST: api/Login
       public void Post([FromBody]string username, [FromBody]string password)
       {
           if (IsAuthenticatedUser("LDAP string", username, password))
           {
               Redirect("Index");
           }
           else
           {
               throw new HttpResponseException(HttpStatusCode.Unauthorized);
           }
       }

我正在考虑尝试这样的身份验证,你的想法是什么?

嗯,我认为为 WebApi 进行 FORMS 身份验证是不正确的。 WebApi 的意义是以 RESTful 方式处理数据。

所以我的建议是(如果你想使用AD FORMS认证):

1) 创建测试环境以测试 AD 身份验证 - 为此,您可以使用 Oracle VirtualBox。在上面,你要安装Windows Server 2016(评估180天),这里建AD,创建域,添加一些测试用户,安装AD SSL证书(手工制作即可);

2) 在主机上安装来自 1) 的证书,用于主机和虚拟 PC 之间的 SSL 连接(因为您要发送纯文本凭据);

3) 在您的 Web 应用程序中,您使用 SSL[=43= 创建传统的 MVC 登录页面] cookie 来存储凭证信息:您在 Authenticate 控制器方法中创建此 cookie。身份验证的过程就像在web.config中为System.Web.Security.ActiveDirectoryMembershipProvider[=43=写入正确的连接字符串一样简单,检查用户有效性是一个普通Membership.ValidateUser方法;

4) 成功验证用户后,使用保存的 cookie 在内部 WebApi 请求之间验证用户