在服务器端用当前登入的用户身份请求某一页面
2010-07-02 18:03
148 查看
如果是Forms认证的话,实现起来很简单,因为相关的凭据都在cookie中,只要把所有的cookie都付给HttpWebRequest就可以了.
代码如下:
1 Uri uri = new Uri(url);
2 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
3 CookieContainer c = new CookieContainer();
4 for (int i = 0; i < curRequest.Cookies.Count; i++)
5 {
6 c.Add(new Cookie(curRequest.Cookies[i].Name, curRequest.Cookies[i].Value,
7 curRequest.Cookies[i].Path, uri.Host));
8 }
9 request.CookieContainer = c;
request.Method = "GET";
request.AllowAutoRedirect = false;
WebResponse response = request.GetResponse();
但是如果是Windows集成认证的话,身份凭据就不在cookie中的.因此需要调用LogonUserIdentity.Impersonate()来模拟,然后再取用户身份信息.
代码如下:
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //HttpRequest curRequest = Page.Request;
1 using (WindowsImpersonationContext context = curRequest.LogonUserIdentity.Impersonate())
2 {
3 NetworkCredential cred2 = (NetworkCredential)CredentialCache.DefaultCredentials;//再取就是登录的用户而不是当前iis运行账户
4 CredentialCache cache =new CredentialCache();
5 cache.Add(request.RequestUri, "NTLM", cred2);
6 request.Credentials = cache;
7 request.Method ="GET";
8 request.AllowAutoRedirect =false;
9 WebResponse response = request.GetResponse();
context.Undo();
}
代码如下:
1 Uri uri = new Uri(url);
2 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
3 CookieContainer c = new CookieContainer();
4 for (int i = 0; i < curRequest.Cookies.Count; i++)
5 {
6 c.Add(new Cookie(curRequest.Cookies[i].Name, curRequest.Cookies[i].Value,
7 curRequest.Cookies[i].Path, uri.Host));
8 }
9 request.CookieContainer = c;
request.Method = "GET";
request.AllowAutoRedirect = false;
WebResponse response = request.GetResponse();
但是如果是Windows集成认证的话,身份凭据就不在cookie中的.因此需要调用LogonUserIdentity.Impersonate()来模拟,然后再取用户身份信息.
代码如下:
//HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //HttpRequest curRequest = Page.Request;
1 using (WindowsImpersonationContext context = curRequest.LogonUserIdentity.Impersonate())
2 {
3 NetworkCredential cred2 = (NetworkCredential)CredentialCache.DefaultCredentials;//再取就是登录的用户而不是当前iis运行账户
4 CredentialCache cache =new CredentialCache();
5 cache.Add(request.RequestUri, "NTLM", cred2);
6 request.Credentials = cache;
7 request.Method ="GET";
8 request.AllowAutoRedirect =false;
9 WebResponse response = request.GetResponse();
context.Undo();
}
相关文章推荐
- jQuery 中的 Ajax 全局事件 当用户点击页面上某一按钮请求数据时,在页面上显示 loading... ,页面加载完成后隐藏
- 获得浏览当前页面的用户的主机名
- linux 查看当前用户id、whoami用户列表、用户组、用户权限/etc/passwd、/etc/group、/etc/shadow以及切换用户身份、su、sudo、/etc/sudoers
- ORA-01013:用户请求取消当前的操作
- javascript 父页面单击按钮,弹出窗口,接受用户输入,关闭当前弹出窗口,返回父页面
- exlipse 执行sql语句 报 java.sql.SQLException: ORA-01013 报错用户请求取消当前的操作
- uploadify请求当前jsp页面所在的地址
- 让Win服务已当前登录用户的身份来执行函数
- 微信支付成功,如何刷新用户当前页面的余额
- mysql+jsp,在jsp页面连接了数据库,已成功获取数据库字段,请问如何取到当前用户对应的信息
- CAS如何在服务器端的登陆成功页面获取登陆用户帐号的方法
- springBoot+springSecurity+freemarker项目中页面获取当前登录用户
- sharepoint 判断当前用户在当前页面是否有某项权限
- su命令_Linux su 命令用法详解:用于切换当前用户身份到其他用户身份
- 权限管理页面,ajax异步刷新,获取当前用户权限-checkbox显示已选
- 微信会员注册开发【带源码】:网页授权,得到code后在当前页面获取openid,js+php实现跨域请求
- 服务器端处理不同时区用户的请求
- asp.net中的窗体身份验证(完整篇之三:用户登录页面)
- linux查看当前用户id、whoami用户列表、用户组、用户权限/etc/passwd、/etc/group、/etc/shadow以及切换用户身份、su、sudo、/etc/sudoers
- 获得浏览当前页面的用户的 IP 地址