J'ai un UserNamePasswordValidator personnalisé qui appelle dans ma base de données Oracle.Validateur personnalisé WCF: Comment initialiser un objet "Utilisateur" à partir du validateur personnalisé
Cette classe dérive de System.IdentityModel.Selectors.UserNamePasswordValidator et la méthode Validate() renvoie void.
Je charge mon objet Utilisateur à partir de la base de données, et une fois le mot de passe validé, je veux stocker mon objet "Utilisateur" afin que le service puisse y accéder pour ses activités. Dans le domaine ASP.NET/Java, je le planquerais dans une session, ou peut-être dans ma classe générale de contrôleur. Comment puis-je faire cela à partir du Validateur en WCF? Ou, en d'autres termes, quelle est la meilleure pratique dans le terrain WCF pour définir un objet de domaine utilisateur personnalisé pour le service.
Mise à jour: Voici comment j'ai travaillé autour. Je cache l'objet Utilisateur pendant le validateur, puis j'accède plus tard à l'étape AuthorizatinPolicy.
// this gets called after the custom authentication step where we loaded the User
public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
// get the authenticated client identity
IIdentity client = GetClientIdentity(evaluationContext);
User user;
OraclePasswordValidator.users.TryGetValue(client.Name, out user);
if(user != null) {
// set the custom principal
evaluationContext.Properties["Principal"] = user;
return true;
}
return false;
}
Je charge maintenant mon objet Utilisateur (IPrincipal) dans le validateur de mot de passe, en le mettant en cache dans un dictionnaire statique, en le saisissant dans la AuthoriziationPolicy. Voir modifier ci-dessus. Est-ce la meilleure façon? Sûr semble être un kludge pour un cadre si riche. – codenheim
Eh bien, j'ai foiré le format dans mon édition ci-dessus et je ne peux pas le réparer. C'était censé être une méthode complète ci-dessus dans la zone de code. – codenheim