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)