怎么模拟Windows身份认证登录Web页面?

OneDotRed 2005-04-25 09:29:08
我有一个站点A,认证方式是集成Windows身份验证的。
现在我希望在另一个站点B提供一个链接,通过这个链接以某个固定的Windows账号登录到站点A。请问有什么方法达到?
...全文
736 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
cat_hsfz 2005-04-27
  • 打赏
  • 举报
回复
看到这个问题就很容易让人想去参考Sharepoint和SSO。

如果不是从B站点链接到A站点,而是从B站点下面的一个虚拟目录影射到A站点,而且影射过程相当于自动登录,可以吗?例如http://SiteB/SiteA/Default.aspx就等于https://guest:guest@SiteA/Default.aspx(当然guest:guest只是举例说明有登录帐号,现在的IE都不允许这样传递帐号信息了)。如果可以的话,不如你就在SiteB建立一个站点/SiteA,然后放一个HttpHandler,作用就和代理一样把所有的Request加上用户验证信息然后pass给SiteA。
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
楼上的可以从模拟认证的站点登录到别的需要NT认证的站点吗??我试过是不可以的,如果有哪位成功过请将详细代码贴上来。^_^

我现在详细描述一下,在我的IIS中Default Site上,有两个Web Application,例如A和B,他们访问的页面就是Http://machinename/A/default.aspx和Http://machinename/B/default.aspx,A需要集成的windows身份验证,B则可以匿名登录。
如果别人登录我的A应用,则会弹出一个要求输入账号密码的对话框。我希望别人先登录B应用,B应用用一个固定的Windows账号模拟登录到A的页面,这样就不会弹出对话框了。
Richardhu 2005-04-26
  • 打赏
  • 举报
回复
一个ASP.NET 程序只能有一个进程用户,默认的为ASPNET用户,如果webconfig中设置为<identity impersonate="true" /> 则用户时IUSER_计算机名,如果<identity impersonate="true" userName="Domain\A" password="1"/> 则用户时domain域中的A用户,但这个用户权限一定要够。你也可以在程序中更改登陆用户,例如用
[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

API函数来得到用户认证,然后用
WindowsIdentity newId = new WindowsIdentity(phToken);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();

来模拟认证,更改登陆用户。
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
楼主的做法让我感觉很是蹩脚啊,呵呵
----------------------------------------

呵呵,也有这种需求啊,例如你在外网给客户提供Demo,不希望将机器上的账号透露出去,看能否提供一个临时页面,在内部将Windows帐户封装起来,直接导航到需要的页面啊
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
楼上的楼上估计只能在同一个站点内模拟别的Windows账号
fq_ln 2005-04-26
  • 打赏
  • 举报
回复
楼主的做法让我感觉很是蹩脚啊,呵呵
fq_ln 2005-04-26
  • 打赏
  • 举报
回复
楼主的做法让我感觉很是蹩脚啊,呵呵
Richardhu 2005-04-26
  • 打赏
  • 举报
回复
[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);

[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,
int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);

[DllImport("Kernel32.dll")]
public static extern int GetLastError();

[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]
private void LogON()
{
IntPtr tokenHandle = new IntPtr(0);
IntPtr dupeTokenHandle = new IntPtr(0);
try
{
string UserName, MachineName ,PassWord;

// Get the user token for the specified user, machine, and password using the
// unmanaged LogonUser method.
MachineName = this.txtMachinename.Text;
UserName = this.txtUserName.Text;
PassWord = this.txtpass.Text;

// const int LOGON32_PROVIDER_WINNT50 = 2;
// //This parameter causes LogonUser to create a primary token.
// const int LOGON32_LOGON_INTERACTIVE = 3;
const int SecurityImpersonation = 2;

tokenHandle = IntPtr.Zero;
dupeTokenHandle = IntPtr.Zero;

// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(UserName, MachineName, PassWord,
Convert.ToInt32(this.txtdwLogonType.Text),Convert.ToInt32(this.txtdwLogonProvider.Text)
,ref tokenHandle);

this.TextBox1.Text = returnValue.ToString() +" "+ GetLastError().ToString();

// Check the identity.
bool retVal = DuplicateToken(tokenHandle, SecurityImpersonation, ref dupeTokenHandle);
if (false == retVal)
{
return;
}
else
{
this.TextBox1.Text = "OK";
}
// The token that is passed to the following constructor must
// be a primary token in order to use it for impersonation.
WindowsIdentity newId = new WindowsIdentity(dupeTokenHandle);
WindowsImpersonationContext impersonatedUser = newId.Impersonate();


// Check the identity.

// Stop impersonating the user.
impersonatedUser.Undo();

// Check the identity.
// Free the tokens.
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
if (dupeTokenHandle != IntPtr.Zero)
CloseHandle(dupeTokenHandle);


}
catch(Exception ex)
{
this.TextBox1.Text = ex.Message;
}
}
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
How to authenticate against the Active Directory by using Forms authentication and Visual C# .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q316748
不知道这个咋的,看看ing……
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
呵呵,楼上的解决不了问题,web service可以不通过NT验证访问数据,但是不能打开页面~~
zhangqiushui 2005-04-26
  • 打赏
  • 举报
回复
学习
帮顶
fantiny 2005-04-26
  • 打赏
  • 举报
回复
我只能提醒一点,用webService,登陆全部封装好服务,直接调用接口。
saucer 2005-04-26
  • 打赏
  • 举报
回复
2个不同站之间的Single Sign-On不会这么简单的

一般来说,一个站只认识来自它本站的认证cookie,要么直接认证种下认证cookie,要么转向一认证网站后确认账号后,再种下认证cookie
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
在saucer大哥的blog上和csdn中找到些文章,不知道能否解决我的问题?^_^
研究ing……
saucer 2005-04-26
  • 打赏
  • 举报
回复
look into

Single Sign-On

http://www.eggheadcafe.com/articles/20040317.asp
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
呵呵,打个比方,在域外的登录NT验证的A站点,需要输入用户名和密码,我希望在另外的B站点(匿名可登录)的C页面,提供一个链接(链至A站点),点击C页面的这个链接,不需要输入验证的NT帐户密码,实际上就是在C页面的后台代码中处理掉了。
实现应该是可能的,比方说Sharepoint本来也是集成AD的,但她提供Single Sign-On的技术,可以提供账号映射的方式让外网的用户登录Portal。
希望各位能够提供一些思路!!

谢谢
OneDotRed 2005-04-26
  • 打赏
  • 举报
回复
建议各位将问题看明白
brando_beat 2005-04-26
  • 打赏
  • 举报
回复
强,学习
Richardhu 2005-04-26
  • 打赏
  • 举报
回复
ASP.NET 必须需要匿名登录,如果没有则会跳出帐号密码框,先通过IIS认证,才能进入ASP.NET的认证,我们讨论的身份验证都是ASP.NET的。
具体认证过程可参考MSDN帮助上的:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconaspnetdataflow.htm
saucer 2005-04-25
  • 打赏
  • 举报
回复
>>>通过这个链接以某个固定的Windows账号登录到站点A

where does the link point to? 站点B?

通过站点B的链接以某个固定的Windows账号登录到站点A?

the traffice to 站点A is through this page on 站点B?
加载更多回复(3)
你的Web服务器和应用到底能够支持多少并发用户访问?在出现大量并发请求的情况下,软件会出现问题吗?这些问题靠通常的测试手段是无法解答的。本文介绍 了Microsoft为这个目的而提供的免费工具WAS及其用法。另外,本文介绍了一种Web应用的性能优化方法,并利用WAS测试了它的性能改善程度。 随着服务器端处理任务的日益复杂以及网站访问量的迅速增长,服务器性能的优化也成了非常迫切的任务。在优化之前,最好能够测试一下不同条件下服务器的性能表现。找出性能瓶颈所在是设计性能改善方案之前的一个至关紧要的步骤。    本文介绍Microsoft的Web Application Stress Tool(WAS,Web应用负载测试工具)在Web服务器性能测试中的应用(注:Stress基本含义为“重压;压力”等,本文称之为“负载”)。另 外,我们还将通过WAS评估一种相对简单的网站性能改善方法,这种方法的基本思想是在服务器上生成静态的HTML页面、避免过多的数据库调用。   负载测试是任何Web应用的开发周期中一个重要的步骤。如果你在构造一个为大量用户服务的应用,搞清楚你的产品配置能够承受多大的负载非常重要。如果你在构造一个小型的Intranet网站,测试能够暴露出最终会导致服务器崩溃的内存漏洞以及竞争情况。 无论是哪种情形,花些时间对应用进行负载测试可以获得重要的基准性能数据,为未来的代码优化、硬件配置以及系统软件升级带来方便。即使经费有限的开发组 织也可以对它们的网站进行负载测试,因为Microsoft的WAS是可以免费下载的。WAS要求Windows NT 4.0 SP4或者更高,或者Windows 2000。为了对网站进行负载测试,WAS可以通过一台或者多台客户机模拟大量用户的活动。WAS支持身份验证、加密和Cookies,也能够模拟各种浏 览器类型和Modem速度,它的功能和性能可以与数万美元的产品相媲美。如果你对WAS和Microsoft的另外一个测试工具Web Capacity Analysis Tool (WCAT)之间的差别感兴趣,可以访问Microsoft Web工具的比较页面。 要对网 站进行负载测试首先必须创建WAS脚本模拟用户活动。我们可以用下面四种方法之一创建脚本:通过记录浏览器的活动;通过导入IIS日志;通过把WAS指向 Web网站的内容;或者手工制作。图1所显示的是通过记录浏览器事件生成的脚本的一部分,网站是Microsoft的Duwamish Book Store。Duwamish是Microsoft开发的电子商务Web应用示例,从Duwamish网站的“Phase 4”链接可以下载这个软件包。下载包中包含了它自己的WAS测试脚本。
通过页面性能测试概念+页面加载过程+页面性能指标+页面性能测试工具的学习,可以学到如下内容:①WEB网站页面性能的指标(白屏时间、首屏加载完成时间、FP、FCP、DCL、CLS、FPS等);②WEB网站页面性能测试策略;③WEB网站页面加载过程(前端基础语言:HTML+CSS+JavaScript,DOM、CSSOM、渲染树、布局、绘制);④WEB网站页面性能测试工具的实际操作和功能介绍(开发者工具:控制台、网络、性能、Lighthouse、FPS渲染统计等);⑤WEB网站页面性能测试报告编写。⑥WEB网站页面性能测试步骤和实际操作。课程内容:第一章:课程简介1、课程介绍2、课程大纲第二章:页面性能测试1、页面性能测试概念2、页面性能测试专业术语3、页面性能测试策略第三章:页面加载过程1、HTML概念,HTML5实例,HTML5文档2、CSS概念,CSS实例,CSS文档3、JavaScript概念,JavaScript脚本实例和作用4、DOM和CSSOM理解5、HTML5渲染引擎理解6、HTML5页面内容渲染的过程,HTML渲染树第四章:页面性能测试工具1、页面性能测试具体工具2、Chrome开发者工具介绍第五章:页面性能测试工具-控制台:window.performance1、控制台:window.performance介绍2、window.performance.timing执行结果加载字段理解3、window.performance.timing执行结果属性对应页面阶段理解4、window.performance页面性能参数计算5、window.performance页面性能关键指标计算第六章:页面性能测试工具-网络面板1、Chrome-开发者工具-网络面板介绍2、Chrome-开发者工具-网络-瀑布流指标第七章:页面性能测试工具-性能面板1、Chrome-开发者工具-性能面板-使用方法2、Chrome-开发者工具-性能面板介绍3、Chrome-开发者工具-性能面板-控制按钮区域4、Chrome-开发者工具-性能面板-Overview区域5、Chrome-开发者工具-性能面板-火焰图区域6、Chrome-开发者工具-性能面板-内存图区域7、Chrome-开发者工具-性能面板-统计汇总区域8、Chrome-开发者工具-性能面板-统计汇总区域-摘要内容9、Chrome-开发者工具-性能面板-统计汇总区域-事件时长、调用、发生顺序第八章:页面性能测试工具-FPS监控1、Chrome-开发者工具-FPS监控-FPS介绍、FPS视觉效果、FPS查看方法第九章:页面性能测试-Lighthouse面板1、Chrome-开发者工具-Lighthouse介绍、操作方法、运行的生命周期2、Chrome-开发者工具-Lighthouse报告指标分析3、Chrome-开发者工具-Lighthouse的报告优化建议第十章:页面性能测试工具-Performance insights面板1、Chrome-开发者工具-Performance insights操作方法2、Chrome-开发者工具-Performance insights分析报告第十一章:网速调研1、全国网速的调研和本机网速测试第十二章:页面性能测试总结1、页面性能测试指标采集方式2、页面性能测试报告3、页面性能测试-操作步骤​

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧