重定向回我的网站时,Google身份验证卡住了

时间:2020-09-28 01:08:08

标签: asp.net-core

所以我使用Google身份验证来验证系统上的用户 这是我的代码

public IActionResult Login()
{
    System.IO.File.WriteAllText("log.txt", Url.Action("ExternalLoginCallback"));

    return new ChallengeResult(
          GoogleDefaults.AuthenticationScheme,
          new AuthenticationProperties
          {
              RedirectUri = Url.Action("ExternalLoginCallback")
    });
}

public IActionResult ExternalLoginCallback()
        {
            System.IO.File.AppendAllText("log.txt", "I am redirected");

            var authenticateResult = HttpContext.AuthenticateAsync("External").Result;

            if (!authenticateResult.Succeeded)
                return BadRequest(); // TODO: Handle this better.

            var claimsIdentity = new ClaimsIdentity("Application");

            claimsIdentity.AddClaim(authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier));
            claimsIdentity.AddClaim(authenticateResult.Principal.FindFirst(ClaimTypes.Email));

            var identity = authenticateResult.Principal.Identities.FirstOrDefault();

            if (identity != null)
            {
                var emailClaim = identity.Claims.FirstOrDefault(c => c.Type.ToLower().Contains("emailaddress"));
                if (emailClaim == null)
                {
                    return BadRequest();
                }

                var emailData = emailClaim.Value;
                if (string.IsNullOrEmpty(emailData))
                {
                    return BadRequest();
                }

                var connectionString = _config.GetConnectionString("DefaultConnection");

                UserBL userBL = new UserBL(connectionString);
                var userModel = userBL.GetUserData(emailData);
                if(userModel == null || userModel.HasError)
                {
                    return BadRequest();
                }

                HttpContext.Session.SetString("UserData", JsonConvert.SerializeObject(userModel.Data));

                if (userModel.Data.UserRoles.Any(r => r.Id == (int)UserRolesEnum.ProductOwner
                        || r.Id == (int)UserRolesEnum.CopyEditor))
                {
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    return RedirectToAction("List", "Translation");
                }

                return RedirectToAction("UnAuthorized");
            }

            return BadRequest();
        }


  

效果很好,用户被重定向到google以输入其凭据,然后google将其重定向回网站,直到几天后google停止重定向回网站并停留在https://accounts.google.com.eg/accounts/SetSID

关于如何调试或解决问题的任何指示

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

最后一周后,我发现了问题,它不在服务器的代码中。

IIS限制了查询字符串的字符数(我认为默认值为260个字符),在我的情况下,google使用544个字符的查询字符串进行响应,其中IIS不接受或响应,因此它停留在SetSID上页面

在这里我找到了增加查询字符串最大长度的解决方案 Increase max url length in asp.net core

由于它为什么起作用然后停止了它,我无法弄清楚