我有一個WCF服務,我使用customUserNamePasswordValidatorType(在web.config文件的behaviors \ serviceBehaviors \ serviceCredentials \ userNameAuthentication部分中指定)。如何在WCF中存儲有關經過身份驗證的用戶的信息?
我定製UserNamePasswordValidator這樣工作:
public bool Authenticate(string userName, string password)
{
If (IsUserValid(username, password))
{
UserInfo currentUser = CreateUserInfo(username);
//
// Here I'd like to store the currentUser object somewhere so that
// it can be used during the service method execution
//
return true;
}
return false;
}
在服務調用執行,我需要訪問身份驗證的用戶的信息。比如我想能夠實現:
public class MyService : IService
{
public string Service1()
{
//
// Here I'd like to retrieve the currentUser object and use it
//
return "Hello" + currentUser.Name;
}
}
我的問題是如何以及在何處,我應該在驗證過程中存儲的信息,以便它可以在執行呼叫進程訪問?只要「會話」有效,該存儲應該只會持續。
順便說一下,我不使用(也不想使用)安全會話和/或可靠會話。所以我既建立了安全關係上下文,也關閉了可靠的關係。
我在考慮啓用ASP.NET兼容模式來將用戶信息存儲在HttpContext.Current.Session中,但我感覺這不是應該如何完成的。
好的,但在服務執行期間,我將如何檢索當前用戶的用戶名,以便我可以在數據庫中查找它? – Sylvain
您應該可以在每次服務調用中檢查「ServiceSecurityContext.Current.PrimaryIdentity」。這應該包含當前已通過身份驗證的用戶的IIdentity –
該主要身份具有「Name」屬性,該屬性應該是當前通過身份驗證的用戶的用戶名;將其用作數據庫表中更多用戶信息的「入口點」 –