asp.net權限認證:Windows認證


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權限認證系列

  1. asp.net權限認證:Forms認證
  2. asp.net權限認證:HTTP基本認證(http basic)
  3. asp.net權限認證:Windows認證
  4. asp.net權限認證:摘要認證(digest authentication)
  5. asp.net權限認證:OWIN實現OAuth 2.0 之客戶端模式(Client Credential)
  6. asp.net權限認證:OWIN實現OAuth 2.0 之密碼模式(Resource Owner Password Credential)
  7. asp.net權限認證:OWIN實現OAuth 2.0 之授權碼模式(Authorization Code)
  8. asp.net權限認證:OWIN實現OAuth 2.0 之簡化模式(Implicit)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM