在Silverlight / .NET Web应用程序上启用SSO:NTLM?

时间:2011-03-23 11:45:29

标签: .net silverlight active-directory single-sign-on ntlm

我使用Silverlight,.NET 4(带VB),RIA服务,我在VS 2010下开发。 我正在尝试开发一个允许SSO(单点登录,即通过Windows用户名和Active Directory对应用程序进行自动身份验证)的应用程序,并使用Forms身份验证(如果SSO失败则记录数据库),这就是我有问题。

我试图做的是:

  1. 在应用程序启动时,通过使用RIA服务(相当于Web服务)调用服务器获取Windows用户名,然后返回通过HTTP请求找到的名称(HttpContext.Current.Request.LogonUserIdentity.Name) 。为什么这么贵的电话?因为Windows用户名无法在客户端访问,因为其他堆栈溢出主题将显示给您...

  2. 然后尝试记录针对Active Directory找到的用户:这部分没问题。

  3. 第1部分适用于本地(我确实有类似“DOMAIN \ USER”的东西,但这是因为dev Web服务器在我的机器上运行),但是当应用程序部署在远程服务器上时它不再有效(I然后有“服务NT \网络”,我不能使用)。

    你知道如何摆脱这个大问题吗?这是我的第一首曲目:

    • 设法在客户端获取用户名(但是从我能读到的那将是一个奇迹;即使在默认的ASP.NET页面上使用javascript我也不能)
    • 使用NTLM .NET身份验证机制
    • 配置IIS或使用的服务器(Windows Server 2008),以便在服务器端收到一个好的“DOMAIN \ USER”(可能通过信任设置......?)
    • 使用Windows身份验证,但我怎样才能根据数据库验证用户呢?

    感谢您的帮助,这让我感到疯狂......此外,这也变得非常紧迫: - (

1 个答案:

答案 0 :(得分:0)

嗯,我发现的唯一方法是通过javascript和ActiveX控件获取用户:

var wshshell = new ActiveXObject("wscript.shell");
var username = "UserID=" + wshshell.ExpandEnvironmentStrings("%username%");

当然,这会引发部署问题,因为:

  • 您的所有用户都必须使用I.E。
  • 他们必须设置I.E.允许ActiveX的参数

我很幸运,因为第1点被特别提及,对于第2点,我使用.reg文件在所有计算机上执行,couldn't find better