首页 新闻 会员 周边 捐助

asp.net网站采用Windows集成身份认证,服务端如何取得用户身份信息

0
悬赏园豆:50 [已解决问题] 解决于 2014-05-18 16:55

asp.net网站采用Windows集成身份认证,浏览器采用IE,弹出windows输入密码对话框,

现在服务端需要自定义身份认证,不使用IIS提供的验证。

现在的问题是:

1:服务端如何取得IE提交的用户身份信息。

2:取得的这个信息,如何结合LDAP来实现认证。

3:如果认证通过,怎么可以把凭据传递给Asp.Net应用。

Alvin的主页 Alvin | 小虾三级 | 园豆:828
提问于:2013-04-14 17:14
< >
分享
最佳答案
0

楼主要认证模式还是Forms?参考这个,.Net 一般查MSDN都能找到解决方法,MSDN现在更强大了!

http://msdn.microsoft.com/zh-cn/library/ms180890(v=vs.80).aspx 

收获园豆:15
luofer | 菜鸟二级 |园豆:468 | 2013-04-15 17:05
其他回答(3)
0

等待高手···

收获园豆:5
不负春光,努力生长 | 园豆:1382 (小虾三级) | 2013-04-14 20:34
0
收获园豆:15
chenping2008 | 园豆:9836 (大侠五级) | 2013-04-14 21:52

这篇文章是很赞,但这个是进入Asp.Net后的事情,WindowsAuthtication是IIS干的事情,这个时候,Asp.net还没有参与,也没有资格参与。

我需要的是替换IIS提供的验证provider。应该说,这不是Asp.net层面的事情。

支持(0) 反对(0) Alvin | 园豆:828 (小虾三级) | 2013-04-15 09:20
0

楼主 可以采用   luofer 提供的MSDN方法   我写的域集成验证一直采用Ldap来验证 

收获园豆:15
胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-18 09:32

客户端必须用windows验证,不是自定义form。

目前看来,这里恐怕找不到答案。

支持(0) 反对(0) Alvin | 园豆:828 (小虾三级) | 2013-04-18 21:19

@Alvin: 开启windows验证,然后再页面当初始化时候 获取当前登录页面的Windows用户,去域数据库里面的域账户匹配。如果匹配成功,根据权限加载不同的菜单。如果不成功跳转到自定义提示页面,提示需要需要相应的权限(至于密码错误的情况下,IIS自动回去域匹配,如果错误页面不会初始化的)。不知道符合你的需要吗?

支持(0) 反对(0) 胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-19 14:02

以前做过一个这样的项目 开启Windows验证,但是验证是在数据库的 (密码不在数据库)。 

支持(0) 反对(0) 胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-19 14:05

@-Bei-: 

如何实现的,是否使用了ISAPI Filter?愿闻其详,多谢了!

支持(0) 反对(0) Alvin | 园豆:828 (小虾三级) | 2013-04-21 12:14

@Alvin: 我说下大概的过程吧,就是你写一个PageBase,然后再页面PageLoad事件之前加上 获取当前用户  的登录  :

 1     public class PageBase : Page
 2     {    
 3              protected virtual void Page_Load(object sender, EventArgs e)
 4         {
 5             //获取当前登录用户
 6             Users currentUser = this.UserAccount;
 7             Authentication();//判断是否有权限
 8  9             if (!IsPostBack)
10             {
11               //PostBack
12             }
13          }
14           public virtual Users UserAccount
15         {
16             get
17             {
18                 if (Session["CurrentUser"] == null)
19                 {
20                   
21                     Model.Users user = null;
22                     bool isWindowsLogin = false;
23                     //判读是否是设置了Windows验证
24                     if (ConfigurationManager.AppSettings["WindowsAuthentication"] != null)
25                     {
26                         isWindowsLogin = (ConfigurationManager.AppSettings["WindowsAuthentication"].ToString().ToLower() == "true");
27                     }
28                     if (isWindowsLogin)
29                     {
30                         string domainAccount = Request.ServerVariables["LOGON_USER"];
31                         //string domainAccount = this.User.Identity.Name;
32                         ///根据当前登录用户判断与域账户是否在数据库存在
33                         user = new BLL.Users().GetModelByDomainAccount(domainAccount);
34                     }
35                     //测试需要
36                     //else
37                     //{
38                     //    int userId = 1;
39                     //    user = new BLL.Users().GetModel(userId);
40                     //}
41                     
42                     if (user != null)
43                     {
44                         Session["CurrentUser"] = user;
45                         //默认首页
46                         BLL.Permission bll = new Permission();
47                         //获取当前用户的自定义默认首页
48                         string url = bll.GetUrlByID(user.FirstPage);
49                        //判断是否有权限进入默认页面
50                         if (CheckPermission(WebUtility.GetCurrenCodeByUrl(url))==false)
51                         {
52                             HttpContext.Current.Response.Redirect("/Default.aspx", true);
53                         }
54                         HttpContext.Current.Response.Redirect("/" + url, true);
55 
56                     }
57                     else
58                     {
59                         // 跳转到登录页面,或者未登录提示页面。
60                         HttpContext.Current.Response.Redirect("/NoPermission.aspx", true);
61                     }
62                 }
63                 else
64                 {
65                     Users currentUser = Session["CurrentUser"] as Users;
66                     Session["CurrentUser"] = currentUser;
67                 }
68 
69                 return Session["CurrentUser"] as Users;
70             }
71 
72             set
73             {
74                 Session["CurrentUser"] = value;
75             }
76         }
77     }   
78         
支持(0) 反对(0) 胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-22 08:16

@-Bei-: 

感谢提供代码!

但我这边的需求是接管IIS的身份验证,从ISAPI中取得用户提交的信息,这个时候和Asp.Net没有关系。

支持(0) 反对(0) Alvin | 园豆:828 (小虾三级) | 2013-04-22 11:09

@Alvin: 这里就是IIS接管了身份验证,Asp.net只是去加载页面访问权限。如果没有权限加载会看到所有菜单的。  

IIS的各种身份验证详细测试[转]  你可以看看

支持(0) 反对(0) 胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-22 12:55

@-Bei-: 

你刚好理解反了我的问题:是接管IIS的身份认证(自己实现ISAPI级别的

WindowsAuthentication),不是IIS接管了身份验证。
支持(0) 反对(0) Alvin | 园豆:828 (小虾三级) | 2013-04-23 13:14

@Alvin: 那你去重写:

WindowsAuthenticationModule..::.Authenticate 事件  这个不是很熟悉  你只能自己去网络上面找了,大概就重写

//当前请求进行身份验证时发生。
public void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs args)
{
  if (!args.Identity.IsAnonymous)
  {
    args.User = new Samples.AspNet.Security.MyPrincipal(args.Identity);
  }
}

呵呵

 
支持(0) 反对(0) 胖子哥哥 | 园豆:341 (菜鸟二级) | 2013-04-24 11:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册