web-dev-qa-db-ja.com

カスタムクレームタイプを追加する

OWIN認証が初めてであり、独自のowinクレームタイプを作成するのが難しいことがわかりました。

ここにある。 「GroupID」などのカスタムクレームを追加する必要があるため、別のページで簡単にアクセスできます。

ログインでこのようなことをしました

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);
}

私のログイン部分では、これを行うことで値を取得しようとしました

public ActionResult _LoginPartial()
{
    var identity = (ClaimsIdentity)User.Identity;
    TempData["curUserFullName"] = identity.FindFirst(ClaimTypes.Name).Value;

    string s= identity.FindFirst("GroupID").Value;
    return PartialView();
}

ユーザー名とフルネームを問題なく取得できますが、グループIDによりオブジェクトnullエラーが発生します。

誰かが正しい答えに私をナッジできることを願っています。

27
TheProvost

コードを確認したところ、問題はありません。

ここに私があなたにしたいことを示します:

キャッシュがクリアされたかどうかを確認します。キャッシュがクリアされていない場合は、次のようにクリアできます。CTRL + SHIFT + DELETE

ログイン中にCookieに保存され、明確ではなかったため、新しい申し立てがCookieに保存されなかったことが原因です。

または、serGroupIDに値があるかどうかを確認してください。

21
kwingkwingko