如何判断webservice调用是否来自Forms授权页面?
-
25-09-2019 - |
题
我有一个 ASP.NET Web 应用程序,其中使用多个服务来处理多个 Ajax 请求。问题是如何判断相应的调用是否来自我所服务的页面。我在页面中使用表单身份验证。有什么方法可以授权用户通过相同的表单身份验证调用 weservice。
解决方案
毫无疑问,这是个好问题!
这让我想起一个 我已经回答过的老问题. 。您的情况有所不同,但根本问题仍然相同:如果您从 Web 表单调用 Web 服务,如何 分享 表单的身份验证数据?
对此没有简单且近似的解决方案。您可以考虑将 WS-Security 实施到 Web 服务中,并拥有 网页表格 检查用户是否已获得授权后,根据 Web 服务验证自身身份。
Web 服务不会共享有关用户登录的信息,除非作为参数方法显式传递(即 void PerformAction(string userId, ...)
),但请记住,在这种情况下,视角会发生巨大变化。
这是我想到的最好的想法,但是,请记住,要么您深入地重新设计您的网络服务,要么您无法让用户生成的客户端(即根据您的 WSDL 编译的桌面应用程序)以使用您的服务。
[添加] 现在您已经更详细地解释了您的场景,接下来是软件工程的令人兴奋的部分:)
正如我在评论中所说,您有多种选择,例如:
- 将用户名/密码存储在页面的标记中(在 Javascript 变量中),并让 JQuery 将它们作为 Web 服务的参数发送。然后,WS 将根据该数据对请求进行身份验证。不推荐,因为如果有人可以访问用户缓存,密码就会被利用(有更简单的方法可以在共享/公共计算机上窃取某人的密码,我不会讨论它们),而且还因为如果您打算从纯 HTTP 切换到 HTTPS安全身份验证然后你 必须 也保护网络服务
- 让 Web 应用程序生成身份验证 代币 这对于网络服务有效。这个想法听起来是这样的:首先,在 webapp 和 web 服务之间有一个共享对象(就像里面的一个对象)
Application
集合),或者,如果 Web 应用程序和 Web 服务位于不同的服务器上,则使用 DBMS;然后,对于每个 Web 应用程序的成功身份验证,生成一个唯一的令牌(会话 ID 可以)并将其存储在将传递给 Web 服务的 JS 变量中;最后,当调用 Web 服务时,检查该共享对象的令牌是否有效(即用户已通过身份验证并且仍然登录,并有权访问该 Web 服务,因此身份验证和 授权),否则拒绝
如果其他人有想法,请随时提供帮助;)
其他提示
这可能有帮助: 保护Web服务使用ASP.NET创建一>
- 帕维
由于你在做论坛的认证,你可以做这样的事情你的WebMethod
If Not HttpContext.Current.User.Identity.IsAuthenticated Then
Return Nothing
End If
有可能会更好扔如果你正在做一个GET不过,这样的空的结果没有得到在客户端缓存异常。
不隶属于 StackOverflow