2010-10-22 110 views

回答

2

如果您在ASP.NET页面中托管Silverlight应用程序,则有一种解决方法。

  1. 确保您的网站(托管Silverlight的.xap文件和ASPX页面)启用了Windows集成的安全性,并禁用匿名访问。

  2. 以下内容添加到您的列表:

    < PARAM NAME = “initParams在” VALUE =“myCustomParam1 =美孚,用户id = <%System.Security.Principal.WindowsPrincipal P = System.Threading.Thread.CurrentPrincipal作为System.Security.Principal.WindowsPrincipal;回复于(p.Identity.Name);%>” />

这将通过您的用户名从ASP.NET拉进你的Silverlight应用程序。

  1. 此行添加到您的App.xaml.cs页面,在Application_Startup方法:

    // Take parameters and store them in application resources 
    if (e.InitParams != null) 
    { 
        foreach (var data in e.InitParams) 
        { 
         this.Resources.Add(data.Key, data.Value); 
        } 
    } 
    
  2. 一旦你有了到位上面的步骤,你可以访问背后从页面代码的价值使用以下内容:

    App.Current.Resources [“userId”]。ToString();另外,作为替代方案,如果您在Intranet上运行应用程序,并在安全性较高的情况下以浏览器外模式运行它,则这一切都将变得更加容易。您可以通过访问Windows API这样的:

    如果(Application.Current.HasElevatedPermissions) { 使用(动态wshNetwork = AutomationFactory.CreateObject( “WScript.Network”)){ 回报 (wshNetwork.UserName); }}

+1

我也将增加,有在这种方法中存在安全隐患。一个非常精明的用户可以创建一个你的html页面的副本(包含所需的javascript库和所有的),并修改ASPX页面,以便它们是另一个用户的硬编码凭证。在大多数Intranet情况下,这需要一定量的知识,不应成为问题。如果您的应用程序需要防患于未然,那么您可能希望调查在较低级别添加安全性(即使用具有提升权限的浏览器外模式并利用Windows API)。 – enforge 2010-10-27 15:46:42

0

据我所知,在Silverlight中“直接”使用Windows身份验证是不可能的(至少使用自托管的WCF服务 - 可能有IIS支持?)。

在我看来,完成此操作的一种可接受的方式是将用户名/密码传递到您的服务器,然后使用LDAP库查询Active Directory。请务必使用SSL进行服务呼叫,否则凭据将通过线路清晰传播。