Ajouter Des Types De Revendications
Nouveau à OWIN d'authentification et de trouver qu'il est difficile de créer mon propre owin types de revendications.
Heres la chose. J'ai besoin d'ajouter des allégations comme "Gui", donc je peux facilement y avoir accès sur les différentes pages.
J'ai fait quelque chose comme ça dans mon Login
public ActionResult Login(LoginViewModel model, string returnUrl)
{
UserViewModel userModel = new UserViewModel();
if (!ModelState.IsValid)
{
return View(model);
}
if(CommonHelper.ValidateADUser(model.Username,model.Password))
{
UserViewModel curUser = userModel.GetUserDetails(model.Username);
if (curUser != null)
{
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.WindowsAccountName, curUser.Username));
claims.Add(new Claim(ClaimTypes.Name,curUser.Fullname));
claims.Add(new Claim(ClaimTypes.Role, ""));
claims.Add(new Claim("GroupID", curUser.UserGroupID.ToString()));
var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var ctx = Request.GetOwinContext();
AuthenticationManager.SignIn(id);
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "Invalid login attempt.");
}
return View(model);
}
Dans mon login partielle j'ai essayé d'obtenir la valeur en faisant cela,
public ActionResult _LoginPartial()
{
var identity = (ClaimsIdentity)User.Identity;
TempData["curUserFullName"] = identity.FindFirst(ClaimTypes.Name).Value;
string s= identity.FindFirst("GroupID").Value;
return PartialView();
}
Je peux obtenir le nom d'utilisateur et nom complet, sans problème, mais l'id de groupe provoque un objet null erreur.
En espérant que quelqu'un pourrait me pousser à la réponse correcte.
- êtes-vous en mesure de voir si la nouvelle demande est ajouté à la UserClaims de la table DB?
- Où est le userclaims de la table db?
- dépend de votre application, généralement quelque chose comme ASPNetUserClaims dans votre application DB.
- Je doute qu'il l'enregistre en db bro. Les demandes des utilisateurs sont enregistrées dans les cookies.
- les autres créances correspondent à des valeurs attendues? est-ce que " GroupId demande existe.
- Oui et non. C'est le problème. J'ai essayé de vérifier toutes les créances existantes, mais de l'id de groupe n'est pas l'un d'eux. Est-il une erreur dans mon ajout de créances?
- quel est le
identity.Claims
de la propriété. pouvez-vous voir votre revendication personnalisée lorsque le débogage? - non, ici, les revendications ne sont pas conservées dans une base de données - ce n'est pas un run-of-the-mill Identité de configuration, seulement OWIN l'authentification de la conduite, sans aucune DB derrière elle. Aussi loin que je peux voir, les utilisateurs sont à venir à partir d'Active Directory.
- oui, c'est correct.
- maintenant, la question - pouvez-vous ajouter d'autres revendications? dire ajouter
claims.Add(new Claim("MyTestClaim", "Test Value"));
Pouvez-vous le retrouver? - Essayez également de remplacer méthode de connexion avec ceci:
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, id);
. J'ai à peu près le même jeu pour un de mes projets et avoir ce travail très bien. - Et une autre chose: essayez de faire signer avant la signature:
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
- désolé. c'était un simple problème. Juste oublié de vider le cache de sorte que la demande supplémentaire a été en quelque sorte inexistant, même si je suis passé par l'action login.
Vous devez vous connecter pour publier un commentaire.
Que j'ai vérifié votre Code il n'y a aucun problème.
Voici ce que je veux vous faire:
C'est parce que lors de votre connexion, il vous permettra d'économiser dans des cookies, et il n'était pas clair, et il arrive que la nouvelle demande n'a pas été enregistrer dans les cookies.
Ou essayez de vérifier si votre UserGroupID a une valeur.