2

こんにちは、フォーム認証を使用して MVC4 アプリケーションで acs フェデレーションを使用しています。ログイン中、アプリケーションは完全に認証され、gmail などを介して SSO 後にホームページにリダイレクトされます。電子メール ID がデータベースに記録された電子メールと一致するユーザーのエージェント ID を保存したいのですが、問題は、しばらくするとエージェント ID が自動的に削除され、請求されることです。このコードを介して他のページから Agent Id にアクセスしようとしているときに、AgentID が削除され、null が表示されます。

((ClaimsIdentity)HttpContext.Current.User.Identity).Claims.Where(c => c.Type.Equals(ClaimTypes.Role)).FirstOrDefault();

gmail資格情報を入力した後にユーザーがリダイレクトする場合のログイン方法は次のとおりです。

     [HttpPost]
    [ValidateInput(false)]
    [AllowAnonymous]
    public ActionResult SignIn()
    {
        UserRoles userObj=null;
        Customer customerObj=null;
        ClaimsIdentity identity = User.Identity as ClaimsIdentity;

        var claimCollection = identity.Claims;
        Dictionary<string, string> tempClaims = new Dictionary<string, string>();

        foreach (Claim claim in claimCollection)
        {
            tempClaims.Add(claim.Type, claim.Value);
        }

        if (tempClaims["http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider"] != null)
        {
            string strIdentifier = string.Empty;


            if (tempClaims["http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider"] == "uri:WindowsLiveID")
                strIdentifier = tempClaims["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"];
            else
                strIdentifier = tempClaims["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"];


            userObj = repository.Filter(f => f.EmailId.Equals(strIdentifier)).FirstOrDefault();


            if (userObj != null)
            {
                identity.AddClaim(new Claim(ClaimTypes.Role, userObj.Role));


                identity.AddClaim(new Claim(ClaimTypes.SerialNumber, userObj.AgentID.ToString()));




            }                

        }           


        return User.Identity.IsAuthenticated ? RedirectToAction("Index", "Home") : RedirectToAction("Login");

    }
4

2 に答える 2