首先让我说我意识到这与许多其他关于服务访问控制的问题非常相似,但我似乎无法找到与以下所有要点相关的答案,所以我再次询问(可能) .
一些背景知识:我正在使用 .NET 构建一个 Web 应用程序,该应用程序受自定义表单身份验证实现的保护。同一个应用程序(在同一个域内)需要利用 JavaScript/jQuery 中与数据管理相关的多个 REST 服务,因为该应用程序的许多功能不太适合在表单中回发使用。
我正在尝试根据首次访问应用程序时完成的服务器端身份验证来确定实现 REST 服务访问控制的最安全方法。
这是我所描述的示例用例:
- 用户使用表单身份验证登录 asp.net 站点,并在成功验证后将用户带到应用程序的登录页面
- 用户选择从登录页面上的链接访问 ~/Users.aspx 中的页面,该链接基于步骤 1 中身份验证创建的 cookie 形成身份验证允许
- users.aspx 加载一些基本的 HTML 元素,例如一个空表和一个包含在页面加载时生成的令牌 (GUID) 的隐藏字段。JavaScript 使用隐藏字段中的令牌来访问检索数据以填充表的 REST 服务。令牌存储在具有预定义到期时间的数据库中。
- 当使用令牌调用 REST 服务时,它会检查是否过期并用于确定进行调用的用户并为从数据库访问的数据提供授权,如果用户被授权访问/更新数据,则服务执行请求的服务操作,延长令牌的过期时间,并返回响应。
我知道除非使用 SSL 来加密传输,否则在网络上嗅探请求/响应的人会看到令牌,因此使用 SSL 来应对这种情况。
我的问题是:
- 该服务是否容易受到其他攻击?
- 除了为服务静态分配的令牌之外,还有更好的方法来处理基于服务器端登录的 REST 服务的授权和用户识别吗?在我看来,静态分配的用户令牌的安全性会降低,因为如果恶意用户获得它,它会给服务带来无限的访问权限。
- 假设#2 的答案是否定的,是否有更好的方法将令牌传输到客户端并将其存储在页面使用的生命周期中,知道它需要从 JavaScript/jQuery 访问?