【问题标题】:How is oauth secured when used with REST APIs与 REST API 一起使用时如何保护 oauth
【发布时间】:2018-10-04 06:19:16
【问题描述】:

我有一个与我的REST api 交互的网络应用程序。我决定进行一些oauth 身份验证,并且我遵循了一些关于如何实现它的教程,但我仍然在努力理解为什么它是安全的,或者我怎样才能使它安全。

我的实现是这样的......

1. client makes request to Facebook
2. client clicks `allow access`
3. Facebook redirects back to client with code in URL
4. client makes a POST request of the code to the REST API
5. REST API authenticates code via a request to Facebook using the secret key
6. Success/fail response to client from REST API

我的问题是,这如何确保安全?据我所知,code 被保存在浏览器的 URL 中,因此一些恶意代码可以提取此 code。如果恶意代码能够在 代码 过期之前找出是什么 REST 调用对其进行了身份验证,那么他们就可以将自己作为其他人进行身份验证并访问他们的数据。

我的实现可能是错误的,但是,我尽我所能关注diagram 以及其他教程。

如果我的方法有误,我该怎么做才能确保安全?

【问题讨论】:

    标签: rest api authentication oauth oauth-2.0


    【解决方案1】:

    稍后我会回答你的问题,但首先让我先说一些预备知识。

    Oauth 是关于授权,而不是身份验证。将问题中的“身份验证”更改为“授权”。

    点击“允许访问”的不是客户端,而是用户。 Oauth 的要点是,用户希望在不向客户端提供密码的情况下授予客户端访问他的某些数据的权限。 Oauth 允许他使用他信任的浏览器执行此操作,因此用户可以放心使用客户端。

    如果没有 Ouath 协议,他能够做到这一点的唯一方法就是向客户提供他的密码。想象一下,您每天使用的许多客户端想要访问您的 Facebook 数据——如果没有 Oauth,您将不得不将您的 Facebook 凭据输入到这些客户端中,这将使他们能够完全访问您的所有 Facebook。你会觉得舒服吗?您不应该这样做,因为它会为各种恶意软件滥用打开大门。 Oauth 允许限制这些客户可以从您的 Facebook 帐户(或任何帐户)访问的内容,因此您可以对您正在使用的应用程序充满信心。

    现在,关于您的问题 - URL 中代码的风险。这确实是一个有效的问题,但它是一次性使用的(它被交换为一个访问令牌以供多次访问使用)并且生命周期很短。使用授权码的原因在Section 3.4 of the Oauth threat model中有说明。 Section 4.4.1.1 of the Oauth threat model 中解决了您所询问的确切问题:

    o 根据核心 OAuth 规范,授权服务器以及 客户必须确保这些传输受到保护 使用传输层机制,例如 TLS(参见第 5.1.1 节)。

    o 授权服务器将要求客户端进行身份验证 尽可能将授权“代码”绑定到 可以以可靠的方式验证某些客户端(请参阅 第 5.2.4.4 节)。

    o 对授权“代码”使用较短的到期时间(第 5.1.5.3)。

    o 授权服务器应该强制执行一次性使用 限制(参见第 5.1.5.4 节)。

    o 如果授权服务器观察到多次尝试兑换 一个 授权“代码”,授权服务器可能想要撤销 基于授权“代码”授予的所有令牌(请参阅 第 5.2.1.1 节)。

    o 在没有这些对策的情况下,缩小范围 (第 5.1.5.1 节)和访问到期时间(第 5.1.5.3 节) 令牌可用于减少泄漏时的损坏。

    o 客户端服务器可能会重新加载重定向 URI 的目标页面 为了自动清理浏览器缓存。

    现在,RFC 7636 中发布的 Oauth 协议也得到了增强,可防止其他客户端窃取移动设备上特定客户端的授权代码。有关详细信息,请参阅 RFC。

    【讨论】:

    • 谢谢,这非常详细,帮了我很大的忙!
    猜你喜欢
    • 1970-01-01
    • 2016-01-09
    • 2020-07-24
    • 2014-12-24
    • 2021-10-14
    • 2015-01-14
    • 2018-06-04
    • 2020-07-22
    • 2016-10-07
    相关资源
    最近更新 更多