【问题标题】:Azure ACS + Form value storageAzure ACS + 表单值存储
【发布时间】:2011-11-26 17:02:49
【问题描述】:

我在我的 ASP.net MVC 3 网站(也托管在 Azure 中)中使用 Azure ACS,场景是这样的: 用户首先进入我的网站并填写一个字段表单,然后他们需要选择一个提供者并登录,但首先我想存储字段值,所以当他们从登录返回时,我可以使用这个值创建一个配置文件对于已登录的用户。

所以我相信当他们第一次进入该站点然后离开登录并再次进入该站点时,这是两个不同的会话,对吗?这就是使用会话状态(通过 SQL Server)存储的数据在登录后返回时不存在的原因,对吗?如果这是真的,那么最好的方法是什么?如果不是,那么我在存储临时数据时做错了什么?

谢谢

更新: 我发现 HttpContext.Application 状态可以保存数据,但考虑到它在 Azure 中,我仍然不确定在控制器中使用它是否是个好主意,它会在生产中正常工作吗??

【问题讨论】:

  • 您应该使用应用程序状态来存储以用户为中心的数据。尤其是在 Azure 中(但不仅在 Azure 中)。引用自:msdn.microsoft.com/en-us/library/ms178594.aspx:“应用程序状态是存储少量常用数据的有用位置,这些数据不会从一个用户更改为另一个用户。”跨度>
  • 是的,我真的不想使用状态,谢谢 :) 虽然公开的不是用户数据,而是数据

标签: asp.net-mvc-3 session azure acs


【解决方案1】:

您可以使用 wctx URL 参数在 WS-Federation 重定向序列中传递状态。在处理初始 POST 请求的操作中,您应该获取要保留的表单参数,然后重定向到您的身份提供者选择页面(这必须是自定义页面),并将表单参数附加到 URL。当用户在您的页面上选择一个 IP 时,您可以使用 wctx 参数再次传递该参数。 WS-Federation 被动请求者配置文件表明,当 IP 将用户重定向回您的站点时,这最终应该返回给您。

这有一些细节

http://msdn.microsoft.com/en-us/library/bb608217.aspx

编辑:当用户最终返回您的应用程序时,从请求中取出 wctx 参数。在动作代码中加入这样的内容:

var fam = FederatedAuthentication.WSFederationAuthenticationModule;

if (fam.CanReadSignInResponse(System.Web.HttpContext.Current.Request, true))
{
    string wctxValue = this.HttpContext.Request.Form["wctx"];
}

我的偏好是让 wcxt 参数代表一个重定向 URL(URL 编码),您的参数作为查询参数,因此它是这个的 URL 编码版本:

wctx=https://yourserver/yourapp/yourpage?yourparameter=foo

然后,从 ACS 接收重定向的操作将简单地提取 wctx 的值并对其进行重定向,而无需进行任何处理。这让事情变得简单。

【讨论】:

  • 哦,我明白了,所以这个参数在登录后总是会返回,我可以在它消失之前将它附加到 IP url 对吗? :)
  • 对。必须创建自己的 IP 选择器页面有点不方便,但可以从 ACS 控制台下载的示例是一个很好的起点。祝你好运!
  • 好吧,我想我明白了,wctx 参数里面有参数所以我想我必须修改这个字符串并在那里有我的参数,现在另一个新手问题是我如何从代码中获取这个参数用户回来时的控制器? :(
  • 我觉得这篇文章很有帮助 stackoverflow.com/questions/8240124/… 我想我已经接近了,我会深入研究这些东西 :) 谢谢
  • 是的,我做到了,谢谢 :) 只需将上下文传递给我已经拥有的帮助者,这些帮助者随培训工具包的 ASP.net mvc 的简单 ACS 样本一起提供,并获得参数返回你描述的方式
【解决方案2】:

另一种方法是将需要传递的任何数据保存在数据库中,然后传递一些引用回数据库记录的 ID。您将通过 wctx 将此 ID 传递给 IP 并返回(正如 Mike 上面提到的)。

这将解决 URL 长度有限的问题(如果您的数据非常大)。当然,您需要管理删除这些数据,但这应该不难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多