1

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

2 回答 2

1

如果您在大多数情况下更改 SessionId 有问题,则意味着该用户的 Session 对象中没有任何内容。只需向 session 添加任何内容,SessionId 对用户应该保持不变:

Session["UserIsHere"] = true;
于 2013-01-09T00:31:31.500 回答
0

我有同样的信息,但不同的问题。

我在 google oauth 面板中注册的 url(来源和重定向)以 www 开头。

有些用户在没有 www 的情况下上网,并收到错误消息。

即Google cpanel conf:http://www.somesite.com,重定向到http://www.somesite.com/oauth2

一些用户访问 http://somesite.com。

解决方案:限制用户只能使用www版本或者将裸域重定向到www,所以认证请求总是来自Oauth面板中注册的域。

希望能帮助到你!

于 2014-01-13T18:14:32.387 回答