繁体   English   中英

Facebook Connect和ASP.NET Forms身份验证 - 计时/ Cookie问题

[英]Facebook Connect & ASP.NET Forms Authentication - Timing/Cookie Problem

就是我所拥有的

  • ASP.NET 4.0 Web应用程序
  • 表单身份验证(基于Cookie)

是我正在尝试做的事情

  • 与Facebook Connect集成(使用JavaScript和Graph API)
  • 为我的用户提供单点登录服务(如果他们登录并连接到Facebook,则自动登录用户)

在每个页面上都有一个控件,显示匿名/登录的用户详细信息。

问题出现了:在这个用户控件的Page_PreRender上(在每个页面上,所以考虑在每个页面请求上执行此事件),我尝试根据Facebook身份验证状态(JavaScript API - Cookies)自动登录。

如果登录成功,我使用FormsAuthentication.SetAuthCookie登录。

这一切都很好。

然而,在我单点登录后(字面意思是下一行),我需要渲染出匿名的东西(请登录)或经过身份验证的用户资料(显示名称等)。 问题是,用户还没有真正“验证”我的网站。 要对我的网站进行“身份验证”,我会做标准的事情(检查HttpContext.User.Identity.IsAuthenticated属性)。

我认为它尚未设置为"true ”,因为已经创建了Forms Auth cookie,但是在响应中, HttpContext.User.Identity.IsAuthenticated基于此时的请求 - 我是否就在那里?

当然,即使用户已登录,它也会显示匿名详细信息。

当我刷新页面时,会显示正确的用户详细信息。

所以它几乎是一个时间问题。 如何自动登录用户(通过FormsAuthentication.SetAuthCookie )确保HttpContext.User.Identity.IsAuthenticated为真?

也许我在错误的地方进行身份验证/单点登录?

或者我需要几乎做一个Response.Redirect给自己,以刷新HTTP请求中的cookie?

众所周知,Facebook Connect的doco分散且极小,所以所有这些都是将事情拼凑在一起的问题。

任何帮助将不胜感激...欢呼!

好的,我找到了答案(这是我希望的答案,而不是答案)。

正如我预测的那样, FormsAuthentication.SetAuthCookie在HTTP Response Stream中创建了一个身份验证cookie。 但是HttpContext.User.Identity.IsAuthenticated读取HTTP请求流(没有cookie)。

所以解决方案是使用Response.Redirect(this.Context.Request.RawUrl, true)以编程方式刷新页面(第二个参数终止当前页面执行)以重新加载HTTP请求中的cookie。

这就是为什么我猜我们总是有一个Login.aspx页面设置表单cookie,然后重定向到某个地方,因为当重定向到“某处”时,会发出另一个请求,以便刷新cookie。

我可能会将Facebook授权内容放在一个独立的.aspx页面中,并且与常规表单身份验证相同。

哦,微软人员在这里提到了“刷新”的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM