问题出在这里。我正在为帐户余额类型网站使用ASP.NET表单身份验证。一旦用户登录,他们可以通过访问第三方网站(3pw)针对他们的帐户进行付款。当用户点击进行付款时,会发生以下情况:与第三方网站集成导致表单身份验证问题
- 我的网站向3pw传递一个ID请求。
- 3pw做一个请求回我的网站传递ID加一个安全ID。
- 我验证的东西....
- 更多的事情发生,你不需要关心...
当我测试这个过程中,我可以在网络日志中看到我在我的网站上进入一次性付款页面。使用Live HTTPHeaders之类的东西,我可以看到3pw网站的请求(步骤#1)。然后,网络日志显示3pw到我的网站的请求(步骤#2),但日志中的下一个条目是对我的网站登录页面的新请求。
login.aspx?ReturnUrl=mypage.aspx
3pw不知道如何处理重定向到登录页面,然后失败。问题是为什么我的网站认为当请求从3pw到mypage.aspx时,用户不再被认证?我看过我的cookies和我登录时创建的cookie仍然存在。不应该告诉服务器我还是一个经过身份验证的用户吗?
这是我在我的web.config
<authentication mode="Forms">
<forms defaultUrl="~/somepage.aspx"
loginUrl="~/login.aspx"
protection="All"
timeout="30"
name="MyCookieName"
enableCrossAppRedirects="true"
requireSSL="true"/>
</authentication>
<location path="manage">
<system.web>
<authorization>
<allow roles="UserRole" />
<deny users="?" />
</authorization>
</system.web>
</location>
认证的用户都在角色的UserRole。 3pw所请求的页面位于管理目录中。 3pw不是用.NET编写的,我无法控制其配置。
更新:
我道歉,如果我不是明确的,因为我可以。让我重述一下这些步骤。
- 用户登录到我的网站并进行身份验证。
- 用户转到我的网站上的一次性付款页面。
- 在一次性付款页面上,用户点击一个付款按钮。
- Make Payment按钮向3pw传递一个GET请求,在查询字符串中传递一个id。
- 3pw查看请求并向我的网站上的验证页面发出POST请求。
这是错误发生时验证页面的帖子。根据日志文件,对验证页面的请求正被重定向到登录页面。我的Web服务器看到请求进来,尝试提供页面,但实现用户未通过身份验证,并将请求重定向到登录名。这部分让我感到困惑,因为我认为服务器会查看用户是否已通过身份验证,并且因为仍然存在cookie,所以请提供所请求的页面。
也许我不完全理解整个过程,但是由于从我登录的用户发起的对3pw的请求不会从我的用户那里返回到我的站点的任何请求吗?
如果是这样的话,我该如何解决此得到。我讨厌建议,但是我需要使用iframe。 – Notorious2tall 2009-02-13 22:23:54