Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 请求和进程用户授权之间的会话更改_C#_Oauth 2.0_Dotnetopenauth - Fatal编程技术网

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

C# 请求和进程用户授权之间的会话更改,c#,oauth-2.0,dotnetopenauth,C#,Oauth 2.0,Dotnetopenauth,我试图实现一个简单的登录页面,将用户重定向到OAuth2.0登录服务器,然后在成功登录后返回回调URL 但是,我不断收到异常,并显示错误消息: 通过回调和接收到意外的OAuth授权响应 与预期值不匹配的客户端状态 通过调试,我注意到调用“RequestUserAuthorization()”之前和之后的会话id是不同的 我从一些SO答案中读到,我需要以某种方式防止会话更改,但不确定在这种情况下如何实现这一点 任何帮助都将不胜感激,谢谢 我的具体实施如下: private readonly Web

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

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

Session["UserIsHere"] = true;

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

Session["UserIsHere"] = true;

我有相同的信息,但不同的问题

我在GoogleOAuth面板中注册的url(来源和重定向)是以www

一些用户在没有www的情况下访问web,并收到错误消息

i、 e.Google cpanel conf:http://www.somesite.com,重定向至http://www.somesite.com/oauth2

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

解决方案: 限制用户仅使用www版本或将裸域重定向到www,因此身份验证请求始终来自Oauth面板中的注册域


希望有帮助

我有相同的信息,但问题不同

我在GoogleOAuth面板中注册的url(来源和重定向)是以www

一些用户在没有www的情况下访问web,并收到错误消息

i、 e.Google cpanel conf:http://www.somesite.com,重定向至http://www.somesite.com/oauth2

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

解决方案: 限制用户仅使用www版本或将裸域重定向到www,因此身份验证请求始终来自Oauth面板中的注册域


希望有帮助

会话状态是ASP.NET功能,而不是特定于视图的功能。因此,无论是web窗体还是MVC都无关紧要。@AndrewArnott WebServerClient的RequestUserAuthorization方法会导致控制器启动新会话吗?使用上述方法,在达到RequestUserAuthorization之前,我的会话ID保持不变。上一个会话ID已传递给auth server,但在登录后返回到web客户端时,客户端的会话ID会更改。我也遇到了同样的问题。。。我应该在客户端添加会话变量吗?但是,这是由DotNetOpenAuth引起的还是ASP.NET的正常行为(即:更改SessionId值并导致该错误)?@Kassem-这是正常的会话状态行为(与auth无关)。空会话和相应的ID(在cookie中)不会以任何形式持久化。@AlexeiLevenkov:我明白了。我刚刚尝试在客户端添加会话变量。我在
AuthenticateRequest
事件中的
HttpModule
中管理整个身份验证过程。显然,在
PostAcquireRequestState
事件之前,ASP.NET不会实例化会话状态。所以我想这可能是我问题的根源?但为什么它有时有效,有时无效呢。我无法找出它失败的特定场景…会话状态是ASP.NET功能,而不是特定于视图的功能。因此,无论是web窗体还是MVC都无关紧要。@AndrewArnott WebServerClient的RequestUserAuthorization方法会导致控制器启动新会话吗?使用上述方法,在达到RequestUserAuthorization之前,我的会话ID保持不变。上一个会话ID已传递给auth server,但在登录后返回到web客户端时,客户端的会话ID会更改。我也遇到了同样的问题。。。我应该在客户端添加会话变量吗?但是,这是由DotNetOpenAuth引起的还是ASP.NET的正常行为(即:更改SessionId值并导致该错误)?@Kassem-这是正常的会话状态行为(与auth无关)。空会话和相应的ID(在cookie中)不会以任何形式持久化。@AlexeiLevenkov:我明白了。我刚刚尝试在客户端添加会话变量。我在
AuthenticateRequest
事件中的
HttpModule
中管理整个身份验证过程。显然,在
PostAcquireRequestState
事件之前,ASP.NET不会实例化会话状态。所以我想这可能是我问题的根源?但为什么它有时有效,有时无效呢。我无法找出它失败的具体场景…我想提醒遇到此问题的任何其他人,请确保在测试时,不要混合使用localhost域和应用程序URL域。。。如果您这样做,来自OAuth服务器的回调将创建一个新会话。您所说的不要混合本地主机域和您的应用程序URL域是什么意思?不明白吗?partI想提醒遇到此问题的任何其他人,请确保在测试时,不要混合本地主机域和您的应用程序URL域。。。如果您这样做,来自OAuth服务器的回调将创建一个新会话。您所说的不要混合本地主机域和应用程序URL域是什么意思?没有得到该部分