2010-07-06 103 views
1

WCF服務由ASP.NET網站託管。 ASP.NET會員不在網站中使用。用戶使用「自定義」頁面進行登錄,登錄用戶的ID存儲到會話(HttpContext.Current.Session)中。WCF服務:如何授權用戶

Silverlight(4版本)應用程序使用WCF服務。

如何檢查當前用戶(即加載Silverlight應用程序)是否有權訪問某個WCF方法?

我看到幾個選項:

  1. 在請求WCF的方法檢查,如果HttpContext.Current.Session對象包含用戶ID。此方法對我無效(HttpContext.Current in WCF service during 2nd request)。
  2. 使用OperationContext - 我不知道如何使用它。

請你:

一個。建議我如何解決上述任何問題;

或(可能是更好的選擇)

b。建議我使用其他方法。

非常感謝。

回答

0

這是一種神奇的...現在HttpContext.Current在每個請求期間都是非空的......不知道爲什麼......如果你知道爲什麼這是可能的 - 請讓我知道。我可以使用它來進行用戶授權...

0
  1. 可以在HttpContext.Current.Session [ 「YourUserID」]到Silverlight 4應用如InitParameter通過;
  2. 將該值添加到應用程序資源中,以便在SL應用程序中可用;
  3. 並將其作爲方法調用中的參數傳遞給WCF服務;如果用戶被授權

這裏

  • 驗證是一個例子:

    對於頁保持你的Silverlight控件:

    protected void Page_Load(object sender, EventArgs e) 
    { 
        this.Silverlight1.InitParameters = "UserID" + HttpContext.Current.Session["UserID"]; 
    } 
    

    在App.Xaml.cs

    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
        this.Resources.Add("UserId", e.InitParams["UserID"]); 
    } 
    
  • +1

    人們應該能夠輕鬆地僞造用戶,只需通過使用螢火蟲更改頁面的html。 – 2010-07-07 05:59:30

    +0

    我想過這種方法,只是我們還需要添加一個用戶密碼(在這種情況下,用戶將只能使用它自己的數據)...... 但不知道如果在HTML中傳遞用戶憑證是一個好主意。 – Budda 2010-07-07 14:54:58

    0

    我相信你可以使用OperationContext併發送會話cookie與你的WC F請求。在服務器端,它會恢復正確的HttpContext.Current.Session,您可以手動執行此操作。

    0

    查看內置的Silverlight 4業務模板 - 它包含使用WCF RIA Services的用戶的驗證和授權。

    +0

    WCF RIA Services(被重命名爲.NET RIA Services)需要Web應用程序項目(但我是一個Web站點)...這就是爲什麼我不想使用它們......但可能至少是一個好主意看看那裏使用的方法......? – Budda 2010-07-07 14:53:05