Windows認證簡單介紹
Windows認證的操作會比較簡單,其主要是把用戶的交給IIS認證,而且還是一種比較安全的認證哦。
在一些企業內部的工作流系統中,都會要求使用Windows認證,因為他不論對開發者還是對最終使用用戶來說,都比較容易操作。
今天我們也來試試,先創建一個demo

新建Default.aspx頁面
先不管他,讓他空着,他的cs頁面如下
using System;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var authenticationType = System.Web.HttpContext.Current.User.Identity.AuthenticationType;
var domainUserName = System.Web.HttpContext.Current.User.Identity.Name;
Response.Write("域賬號:" + domainUserName + "<br/>");
Response.Write("認證類型:" + authenticationType + "<br/>");
}
}
}
web.config配置文件
<configuration>
<system.web>
...
<authentication mode="Windows" />
</system.web>
</configuration>
IIS身份認證中關閉其他認證,只保留“Windows身份認證”

運行項目

項目通過IIS拿到domainUserName,然后剩下的操作獲取用戶權限等,就跟Forms認證是一樣了,當然了,我們還可以獲取更加詳細的用戶信息
修改default.aspx.cs
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var domainUserName = System.Web.HttpContext.Current.User.Identity.Name;
var authenticationType = System.Web.HttpContext.Current.User.Identity.AuthenticationType;
Response.Write("域賬號:" + domainUserName + "<br/>");
Response.Write("認證類型:" + authenticationType + "<br/>");
var user = this.GetUserInfo(domainUserName);
if (user != null)
{
Response.Write("登錄名:" + user.SAMAccountName + "<br/>");
Response.Write("短名稱:" + user.GivenName + "<br/>");
Response.Write("名稱:" + user.CN + "<br/>");
Response.Write("郵件:" + user.Email + "<br/>");
}
}
private UserInfo GetUserInfo(string domainUserName)
{
try
{
if (string.IsNullOrEmpty(domainUserName))
{
return null;
}
var userArr = domainUserName.Split('\\');
var domain = userArr[0];
var loginName = userArr[1];
var entry = new DirectoryEntry(string.Concat("LDAP://", domain));
var search = new DirectorySearcher(entry);
search.Filter = string.Format("(SAMAccountName={0})", loginName);
search.PropertiesToLoad.Add("SAMAccountName");
search.PropertiesToLoad.Add("givenName");
search.PropertiesToLoad.Add("cn");
search.PropertiesToLoad.Add("mail");
var result = search.FindOne();
if (result != null)
{
var info = new UserInfo();
info.SAMAccountName = result.Properties["SAMAccountName"][0].ToString();
info.GivenName = result.Properties["givenName"][0].ToString();
info.CN = result.Properties["cn"][0].ToString();
info.Email = result.Properties["mail"][0].ToString();
return info;
}
}
catch
{ }
return null;
}
public sealed class UserInfo
{
public string SAMAccountName;
public string GivenName;
public string CN;
public string Email;
}
}
再次運行項目

完美!至此,所有必要操作都已經做完,是不是很簡單?剛開始接觸的童鞋可能會問,既然是認證怎么不用輸入用戶名密碼?
windows認證就是那么任性!不需要用戶輸入用戶口令,直接通過IIS獲取當前用戶的域賬戶名稱,認證過程在你登錄電腦的時候就已經完成了
如何切換用戶
細心的童鞋可能發現了一個問題:如何切換用戶?
這是一個比較現實的問題,因為不能保證企業內所有人都會有一台電腦辦公。
那怎么辦呢?有2種方法
1、是退出當前用戶,登錄另外的用戶
2、調整瀏覽器默認設置,強制輸入用戶口令,如下

我們再試試運行項目

成功了,這次輸入口令后刷新瀏覽器不會再彈出,只有關閉瀏覽器才會重新要求輸入
asp.net權限認證系列
- asp.net權限認證:Forms認證
- asp.net權限認證:HTTP基本認證(http basic)
- asp.net權限認證:Windows認證
- asp.net權限認證:摘要認證(digest authentication)
- asp.net權限認證:OWIN實現OAuth 2.0 之客戶端模式(Client Credential)
- asp.net權限認證:OWIN實現OAuth 2.0 之密碼模式(Resource Owner Password Credential)
- asp.net權限認證:OWIN實現OAuth 2.0 之授權碼模式(Authorization Code)
- asp.net權限認證:OWIN實現OAuth 2.0 之簡化模式(Implicit)
