[英]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用戶進行身份驗證),並且如果憑據不匹配,則會拋出異常。 在這些情況下,您可以完全控制異常,並且可以根據需要處理它們。
如果您是我,請執行以下操作:
我通過嘗試和錯誤找到了解決方案。
如我所想,它更簡單,只需中止線程:
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.