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.

InformationsquelleAutor TheProvost | 2015-10-12