2010-10-22 107 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進行服務呼叫,否則憑據將通過線路清晰傳播。