【问题标题】:Custom membership that uses web service for authentication使用 Web 服务进行身份验证的自定义成员资格
【发布时间】:2012-06-01 04:06:09
【问题描述】:

我正在 ASP.NET MVC 3 中构建 Web 门户,它使用远程 Web 服务作为与数据库通信的唯一方式。 Web 服务要求始终在请求标头中传递用户名/密码,否则它会拒绝调用。

我已经覆盖了 ASP.NET Membership,以便我的 ValidateUser 方法将用户名/密码发送到 Web 服务登录方法,如果身份验证成功则返回 true/false。它与 MVC 3 Empty Internet 模板提供的 AcountController 配合使用非常好。由于我必须在每次 Web 服务调用时传递用户名/密码,因此我将它们保存在 Session 中。

我的问题是:

如果我关闭浏览器并重新打开它...我仍然登录到网站,但我的 Session 变量已过期,因此即使我仍然使用凭据登录,我对 Web 服务的请求都不会被接受。

我正在寻找如何将用户登录状态与会话状态同步的好建议。要么让它们都保持持久性直到使用注销,要么让它们都在浏览器关闭时处理。

感谢所有建议:)

【问题讨论】:

    标签: asp.net asp.net-mvc-3 web-services membership-provider


    【解决方案1】:

    当用户使用您的 AccountController 登录时,尝试像这样设置 auth cookie:

    FormsAuthentication.SetAuthCookie(model.UserName, false);
    

    这应该告诉 ASP.NET 在浏览器窗口关闭时删除 cookie。然后,当用户打开新浏览器时,会话和身份验证 cookie 都应该被销毁。

    【讨论】:

      【解决方案2】:

      会话是客户端的 cookie。表单身份验证(使用您的会员资格提供商)也使用 cookie。

      它们是不同的。

      您的身份验证票或 cookie 是否持久? This MS KB 会比我在这里更详细地解释事情和场景......

      Hth.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        相关资源
        最近更新 更多