【问题标题】:Is there a standard/typical way to forward credentials to a back-end web service?是否有标准/典型方式将凭据转发到后端 Web 服务?
【发布时间】:2011-06-24 16:51:01
【问题描述】:

设置如下: 1.前端网站,表单认证 2. 后端 Web 服务(可能是 WCF),位于启用 HTTPS 的不同网络上。

因此,前端的代码通过这些后端 Web 服务检索数据。

后端 Web 服务本身需要对用户请求进行身份验证。后端 Web 服务不只是将数据分发给前端服务,相信一切正常。

那么这是怎么做到的呢?现在唯一想到的是在登录期间,将密码存储在加密表单身份验证 cookie 的 UserData 字段中,以便将来的请求可以使用它来访问后端。但是男孩会觉得恶心。

这似乎是一种非常常见的设置,但我无法通过谷歌搜索找到任何好的想法。

请注意,前端将是一个 MVC 应用程序,尽管我认为 MVC/Web 表单并不重要——任何解决方案都可能对两者都适用。

【问题讨论】:

  • 谁拥有用户的凭据?您是要为前端和后端服务器分别存储它们还是共享它们?
  • 它们是共享的,存在于后端的数据库中。换句话说,“Validate Credentials”是前端在登录时使用的 Web 服务方法之一。但是在下一页上,前端需要显示一个数据图表。此时前端只有用户的userID,无法认证到后端获取信息

标签: asp.net web-services authentication


【解决方案1】:

观众的蟋蟀......

我决定采用的策略如下:

登录后,前端网站会创建普通表单身份验证票。它还调用一个后端 Web 服务登录函数,该函数也将实现表单身份验证。后端 Web 服务返回的 ASPXAUTH cookie 将存储在前端表单身份验证 cookie 的 UserData 属性中。

所以现在,当前端需要调用一个后端方法时,它会在前端表单身份验证票的 UserData 中存储后端表单身份验证 cookie。它可以将其附加到 WCF HTTP 调用以进行身份​​验证。

我能看到的最大危险是会话超时可能会相互抵消,尤其是当用户浏览前端的一些不需要后端调用的页面时。在这种情况下,滑动计时器将在前端重置,但不会在后端重置。我能想到的最好的应对方法是让所有对前端的请求都在主动登录的情况下在后端调用 Ping() 方法。

有人认为这个策略有什么漏洞吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多