我有一个 ASP.NET Web 应用程序,其中使用多个服务来处理多个 Ajax 请求。问题是如何判断相应的调用是否来自我所服务的页面。我在页面中使用表单身份验证。有什么方法可以授权用户通过相同的表单身份验证调用 weservice。

有帮助吗?

解决方案

毫无疑问,这是个好问题!

这让我想起一个 我已经回答过的老问题. 。您的情况有所不同,但根本问题仍然相同:如果您从 Web 表单调用 Web 服务,如何 分享 表单的身份验证数据?

对此没有简单且近似的解决方案。您可以考虑将 WS-Security 实施到 Web 服务中,并拥有 网页表格 检查用户是否已获得授权后,根据 Web 服务验证自身身份。

Web 服务不会共享有关用户登录的信息,除非作为参数方法显式传递(即 void PerformAction(string userId, ...)),但请记住,在这种情况下,视角会发生巨大变化。

这是我想到的最好的想法,但是,请记住,要么您深入地重新设计您的网络服务,要么您无法让用户生成的客户端(即根据您的 WSDL 编译的桌面应用程序)以使用您的服务。

[添加] 现在您已经更详细地解释了您的场景,接下来是软件工程的令人兴奋的部分:)

正如我在评论中所说,您有多种选择,例如:

  1. 将用户名/密码存储在页面的标记中(在 Javascript 变量中),并让 JQuery 将它们作为 Web 服务的参数发送。然后,WS 将根据该数据对请求进行身份验证。不推荐,因为如果有人可以访问用户缓存,密码就会被利用(有更简单的方法可以在共享/公共计算机上窃取某人的密码,我不会讨论它们),而且还因为如果您打算从纯 HTTP 切换到 HTTPS安全身份验证然后你 必须 也保护网络服务
  2. 让 Web 应用程序生成身份验证 代币 这对于网络服务有效。这个想法听起来是这样的:首先,在 webapp 和 web 服务之间有一个共享对象(就像里面的一个对象) Application 集合),或者,如果 Web 应用程序和 Web 服务位于不同的服务器上,则使用 DBMS;然后,对于每个 Web 应用程序的成功身份验证,生成一个唯一的令牌(会话 ID 可以)并将其存储在将传递给 Web 服务的 JS 变量中;最后,当调用 Web 服务时,检查该共享对象的令牌是否有效(即用户已通过身份验证并且仍然登录,并有权访问该 Web 服务,因此身份验证和 授权),否则拒绝

如果其他人有想法,请随时提供帮助;)

scroll top