请求和进程用户授权之间的会话更改

时间:2013-01-08 23:27:50

标签: c# oauth-2.0 dotnetopenauth

我正在尝试实现一个简单的登录页面,将用户重定向到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();
        }

2 个答案:

答案 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面板中的注册域。

希望它有所帮助!