zoukankan      html  css  js  c++  java
  • 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、调整浏览器默认设置,强制输入用户口令,如下

    再试试运行项目

    成功了,这次输入口令后刷新浏览器不会再弹出,只有关闭浏览器才会重新要求输入

  • 相关阅读:
    自然语言理解——NLP中的形式语言自动机
    自然语言理解——数学基础
    自然语言理解——introduction
    网络挖掘技术——association rule
    网络挖掘技术——Recommendation
    网络挖掘技术——微博文本特征提取
    网络挖掘技术——text mining
    语音交互技术——语音编码
    语音交互技术——线性预测编码(LPC)
    语音交互技术——语音信号特征提取
  • 原文地址:https://www.cnblogs.com/jiangshuai52511/p/10695884.html
Copyright © 2011-2022 走看看