簡體   English   中英

WCF:如何以無效方法驗證憑據?

[英]WCF: How to validate credentials in a void method?

我想將自己的WCF服務與憑據一起使用,因此我觀看了一些教程,以了解如何做到這一點,並得出了從“ UserNamePasswordValidator”類繼承並覆蓋Validate方法的解決方案。 我可以在App.config中設置此類:

public class UNValidator : UserNamePasswordValidator
  {
    public UNValidator() : base()
    {
    }
    public override void Validate(string userName, string password)
    {
      if (userName == "user" && password == "secret")
         return;

      throw new System.IdentityModel.Tokens.SecurityTokenException(
                "Unknown Username or Password");
    }
  }

Validate方法無效! 我在服務器應用程序中使用WCF服務,當有人要登錄並輸入錯誤時,服務器將崩潰。 如何拒絕錯誤的用戶登錄而不會引發異常?

任何幫助表示贊賞。

以我自己構建Web門戶的經驗,我不使用自定義UserNamePasswordValidator方法來驗證用戶,而是創建應用程序密鑰/密碼並對其進行驗證。

之后,我將擁有自己的身份驗證服務(在本例中,我正在對AD用戶進行身份驗證),並且如果憑據不匹配,則會拋出異常。 在這些情況下,您可以完全控制異常,並且可以根據需要處理它們。

如果您是我,請執行以下操作:

  • 創建一個對app_key / app_secret並將它們放置在前端/服務web.config中(假設這在服務器中是安全的),因此您可以使用自定義密碼驗證程序,以確保沒有其他應用程序在使用您的服務層。
  • 創建僅用於身份驗證的Web服務,在此您可以驗證用戶並創建將傳遞給前端會話的令牌。 在這里,您完全有能力做自己想做的事情。

我通過嘗試和錯誤找到了解決方案。

如我所想,它更簡單,只需中止線程:

public override void Validate(string userName, string password)
{
    if (userName == "test" && password == "test")        
        return;

    System.Threading.Thread.CurrentThread.Abort();
}

如果線程異常終止,則客戶端將顯示錯誤“ 403:未經授權”,並且服務器應用程序將繼續運行。

調用方法時,請使用try / catch塊來處理異常。

try
{
    //Logging in.
    var validator = new UNValidator();
    validator.Validate(username, password);
    //Anything written past this point means your login was successful.
}
catch
{
 //Catch the exception here, which means invalid login.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM