如何通过表单在 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 请求之间验证用户
我已经阅读了很多 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 请求之间验证用户