我有一个使用SimpleMembership的ASP .NET MVC4应用程序,允许用户使用他们的Google帐户登录。
为了做到这一点,我通过取消注释OAuthWebSecurity.RegisterGoogleClient();
行来配置应用程序的AuthConfig类,以将google添加为外部登录方法。我在 ASP .NET MVC4 Internet应用程序模板附带的外部登录方法中并没有真正改变。
问题:
当我在本地运行(IIS express)或将其部署到'test'服务器(IIS 6.1,仅在Intranet上访问)时,一切正常。当我点击“使用谷歌登录”按钮时,我被发送到谷歌的身份验证页面,其网址如下所示:
https://accounts.google.com/ServiceLogin?service=lso&passive=12096...(long url)
唉,当我将其部署到“生产”服务器(面向互联网)并尝试通过互联网访问时,Google身份验证将停止工作:当我点击“使用google登录”时,我将被发送到网址看起来像这样:
http://MY_APPLICATION_NAME.MY_DOMAIN.com/accounts/o8/ud?openid.claimed_id=http%3A%2F%2Fspecs.openid...(long url)
此网址错误不仅因为它包含我的域名(我认为它应该是accounts.google.com?),还因为其余部分与我在身份验证工作时获得的网址完全不同。
我所知道并尝试过的事情:
如果我使用fiddler,我可以看到当我通过互联网或内部网访问应用程序时应用程序的行为有所不同。
http://MY_APPLICATION_NAME.MY_DOMAIN.com/account/ExternalLogin?returnUrl=
然后"Tunnel to www.google.com:443, Tunnel to accounts.google.com:443"
发出请求。这没问题。http://MY_APPLICATION_NAME.MY_DOMAIN.com/account/ExternalLogin?returnUrl=
发送请求,然后向http://MY_APPLICATION_NAME.MY_DOMAIN.com/accounts/o8/ud?openid.claimed_id=http%3A%2F%2Fspecs.openid...(long url)
发送另一个请求。这显然给了404。我可能错了,但我认为这个网址是由OAuthWebSecurity.RequestAuthentication(provider, returnUrl)
生成的。让我感到困惑的是,它似乎是在向我的服务器请求身份验证,而不是accounts.google.com。
到目前为止,我的研究只给我发了帖子/问题等。显示使用SimpleMembership进行外部身份验证是多么容易,我可以看到每个人都以同样的方式做到这一点。
结论:
我认为这可能与我必须在web.config或IIS上配置的内容有关。我知道对我的应用程序的请求到达我的DNS服务器,它会重写URL并将请求转发到我的Web服务器,虽然我不知道这是否与问题有关。
有没有人知道可能出现什么问题或有过类似的问题?任何帮助将不胜感激。
修改
我查看了OpenAuthSecurityManager.cs的源代码,虽然我无法调试但是我发现问题可能与RequestAuthentication方法中的错误HttpContext有关,因为我在IIS上进行了反向代理设置?
答案 0 :(得分:0)
我最终要求更改IT基础架构。 OpenAuthSecurityManager.cs可能是一个错误的HttpContext实例,因为前一个基础架构处理请求的方式(请求到达我们的DNS服务器并被转发到Web服务,在我们网络内的不同服务器上,使用UrlRerwrite规则)
现在正在运作。