【发布时间】:2014-09-16 15:40:17
【问题描述】:
Oauth 2.0 的哪些方需要有 SSL 连接?
- 身份验证服务器:需要 SSL
- 资源服务器:需要 SSL
- 客户端应用:真的有必要吗,只要它使用 SSL 进行资源服务器通信?
【问题讨论】:
Oauth 2.0 的哪些方需要有 SSL 连接?
【问题讨论】:
授权服务器需要按照specification 使用 SSL/TLS,例如:
由于对授权端点的请求导致用户 身份验证和明文凭据的传输(在 HTTP 响应),授权服务器必须要求使用 TLS 如第 1.6 节中所述,将请求发送到 授权端点。
由于对令牌端点的请求导致传输 明文凭据(在 HTTP 请求和响应中), 授权服务器必须要求使用 TLS,如 向令牌端点发送请求时的第 1.6 节。
同样的规范对客户端应用程序没有要求,但强烈推荐它:
重定向端点应该要求使用 TLS 描述 在第 1.6 节中,当请求的响应类型是“代码”或“令牌”时, 或者当重定向请求将导致传输 开放网络上的敏感凭据。该规范确实 不强制使用 TLS,因为在撰写本文时, 要求客户端部署 TLS 对许多人来说是一个重大障碍 客户端开发人员。如果 TLS 不可用,授权服务器 应该在之前警告资源所有者关于不安全的端点 重定向(例如,在授权期间显示一条消息 请求)。
缺乏传输层安全性会对 客户端及其授权的受保护资源的安全性 访问。传输层安全的使用尤其重要 当授权过程被用作一种形式时至关重要 客户端委托的最终用户身份验证(例如,第三方 登录服务)。
对资源服务器的调用包含访问令牌并需要 SSL/TLS:
访问令牌凭据(以及任何机密访问令牌 属性)在运输和存储过程中必须保密,并且 仅在授权服务器、资源服务器之间共享 访问令牌对其有效,以及访问令牌所在的客户端 发布。访问令牌凭证必须仅使用 TLS 传输 如第 1.6 节所述,服务器身份验证定义为 [RFC2818]。
原因应该很明显:在其中任何一个不使用安全传输的情况下,令牌都可以被截获并且解决方案不安全。
您的问题专门调用了客户端应用程序。
客户端应用:是否真的有必要,只要它使用 SSL 进行资源服务器通信?
我假设您的客户端是一个 Web 应用程序,并且您正在谈论身份验证发生后浏览器和服务器之间的通信。我还假设您提出了这个问题,因为(在您的实现中),这种通信不是使用访问令牌进行身份验证的,而是通过其他方式进行的。
你有你的答案:通信以某种方式被验证。服务器怎么会知道谁在拨打电话?大多数网站使用他们在会话开始时设置的会话 cookie,并使用它来识别会话和用户。任何可以获取该会话 cookie 的人都可以劫持会话并冒充用户。如果您不希望这样(而且您真的不希望那样),则必须使用 SSL/TLS 来保护浏览器和服务器之间的通信。
在某些情况下,客户端的浏览器部分直接与资源服务器对话;服务器部分仅提供静态内容,例如 HTML、CSS、图像以及最后但并非最不重要的 JavaScript。也许您的客户端是这样构建的,您想知道是否必须通过 SSL/TLS 下载静态内容?好吧,如果不是,中间人可以插入他们自己的恶意 JavaScript,从而窃取您用户的访问令牌。您确实想保护静态内容的下载。
最后但并非最不重要的一点是,您的问题基于一个隐藏的假设,即可能有正当理由不使用 SSL/TLS。人们经常声称证书的成本太高,或者加密需要太多的 CPU 能力,因此需要更多的硬件来运行应用程序。我不认为这些成本在几乎所有情况下都很重要。与构建和运行解决方案的总成本相比,它们非常低。与不使用加密的风险相比,它们也非常低。不要花时间(和金钱)争论这个问题,直接使用 SSL/TLS。
【讨论】: