【问题标题】:How to determine if the webservice call comes from the Forms authorised page?如何判断webservice调用是否来自Forms授权页面?
【发布时间】:2011-06-03 20:20:40
【问题描述】:

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

【问题讨论】:

    标签: asp.net ajax web-services formsauthentication


    【解决方案1】:

    这让我想起了old question I already answered to。你的场景不同,但根本问题是一样的:如果你从 Web 窗体调用 Web 服务,如何与窗体共享身份验证数据?

    对此没有简单且形式接近的解决方案。您可以考虑在 Web 服务中实现 WS-Security,并在检查用户是否已获得授权后让 Web 表单 对 Web 服务进行身份验证。

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

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

    [添加] 既然您已经更详细地解释了您的场景,那么软件工程中令人兴奋的部分就来了 :)

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

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

    【讨论】:

    • 我通过脚本(jQuery)调用服务我不认为认证信息可以通过使用脚本显式传递。
    • 这似乎是个问题...当然,您可以将用户名/密码存储在页面的标记中并通过 JQuery 发送,但我不建议这样做。更聪明的方法是使用 token。编辑和解释方法。
    • 但是 cookie 可能已通过,因此如果您使用表单身份验证,您可能会获得有关经过身份验证的用户的信息(通过表单身份验证票证)。
    • 你可能会说?我不确定......这取决于浏览器和隐私级别恕我直言。无论如何,如果您确定 cookie 已通过,则可以执行 cookie 身份验证或使用活动 Session(ASP.NET 使用 cookied 会话)
    • 通过表单身份验证 cookie 似乎是可能的.. 但是如果用户选择关闭 cookie 怎么办?
    【解决方案2】:

    由于您正在进行论坛身份验证,因此您可以在 WebMethod 中执行类似的操作

    If Not HttpContext.Current.User.Identity.IsAuthenticated Then
        Return Nothing
    End If
    

    如果您正在执行 GET,最好抛出异常,这样空结果就不会在客户端缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多