我正在尝试实现一个简单的登录页面,将用户重定向到OAuth2.0登录服务器,然后在成功登录后返回回调URL。
但是我继续收到错误消息:
使用回调和收到的意外OAuth授权响应 客户端状态与预期值不匹配。
从调试开始,我注意到调用“RequestUserAuthorization()”之前的会话ID是不同的。
我从一些SO回答中读到,我需要以某种方式阻止会话更改,但不确定如何在这种情况下实现这一点。
任何帮助将不胜感激,谢谢!
我的提炼实施如下:
private readonly WebServerClientCustomImpl _oauthClient = new WebServerClientCustomImpl();
public ActionResult Login()
{
IAuthorizationState auth = null;
auth = _oauthClient.ProcessUserAuthorization();
if (auth == null)
{
_oauthClient.RequestUserAuthorization(returnTo: _redirectUrl);
}
else
{
// Save authentication information into cookie.
HttpContext.Response.Cookies.Add(auth.CreateAuthCookie());
return RedirectToAction("Index", "Home");
}
ViewBag.Message = "Future login page...";
return View();
}
答案 0 :(得分:1)
如果您遇到SessionId问题,在大多数情况下更改它意味着该用户的Session对象中没有任何内容。只需向会话添加任何内容,SessionId应保持对用户的相同:
Session["UserIsHere"] = true;
答案 1 :(得分:0)
我有同样的信息,但问题不同。
我在Google oauth面板中注册的网址(来源和重定向)以www开头。
有些用户在没有www的情况下访问网络,并收到错误消息。
ieGoogle cpanel conf:http:// www.somesite.com,重定向到http:// www.somesite.com/oauth2
有些用户访问http:// somesite.com。
解决方案: 限制用户仅使用www版本或将裸域重定向到www,因此身份验证请求始终来自Oauth面板中的注册域。
希望它有所帮助!