什么是OAuth以及它如何保护REST API调用?

时间:2016-06-07 08:31:49

标签: api rest authentication oauth oauth-2.0

我有移动应用程序REST API调用,无需任何令牌或安全机制即可点击我的服务器。

我想保护我的API调用。我正在尝试了解什么是OAuth以及它如何保护我的移动应用REST API调用到我的服务器?

另外,我想详细了解OAuth中使用的以下字段。我将从哪里到达田野。

Consumer Key
Consumer Secret
Token
Token Secret
Timestamp
Nonce

1 个答案:

答案 0 :(得分:20)

由于大多数提供商都使用OAuth 2.0,OAuth 1.0已被主要提供商弃用,我将解释OAuth2.0

什么是OAuth?

OAuth是一种开放的授权标准,通常用作互联网用户使用其Microsoft,Google,Facebook,Twitter,One Network等帐户登录第三方网站的方式,而不会泄露其密码。

你可以实现自己的OAuth服务器,我在这里解释社交认证。所以OAuth后面的术语是指带有OAuth的社会认可。

  

通俗地说,OAuth允许用户使用帐户(Facebook,Google等)登录您的网络服务。

术语:

  • 客户:您的API用户。
  • 资源所有者(api服务器):您的API
  • 授权服务器(auth服务器): Facebook / Google等auth服务器。
  • 授权授权:授权用户的方法。我们在这里使用授权代码。
  • 授权码:auth服务器返回客户端的代码,可以在api服务器上交换访问令牌。
  • 访问令牌:标识用户的字符串,通常会带有到期时间。
  • 使用者密钥或APP_ID: auth服务器用于识别您的应用程序的公钥。
  • 消费者秘密或APP_SECRET:应保密的私钥。

以下条款与OAuth无关,但与OAuth一起使用可使其更安全。

  • 时间戳:一个告诉日期和时间的字符串。
  • Nonce:一个只能使用一次的数字或字符串。

enter image description here
来源:http://smerity.com/

我将以Facebook登录为例解释图表。

背景。 在解释图表之前,请考虑您已完成以下操作。

  1. 您在Facebook开发者门户网站注册了一个应用程序。
  2. Facebook为您提供两个代码:1)secret_key和2 {} app_id
  3. 您设计了一个名为Login with Facebook的按钮。
  4. 现在的图表。

    1. 客户请求API服务器。
    2. API服务器重定向到登录页面说。 To access the data: please login with facebook to access the page
    3. 用户点击login with Facbook按钮,会打开一个新的弹出窗口OAuth dialog。要求用户名和密码。
    4. 用户输入他的用户名和密码,然后允许访问您的应用。 auth服务器会将用户重定向到您的网站,并在网址中输入代码作为参数。
    5. 第4步上调用
    6. API服务器 API服务器从网址捕获代码。
    7. API服务器使用提供的client_secret
    8. 调用 auth服务器
    9. 身份验证服务器会返回API {1}}用户的access token
    10. API服务器 auth服务器询问给定access token的用户信息。
    11. Auth服务器会返回有关用户,个人资料照片,电子邮件等的详细信息。
    12. API服务器标识用户,向他发送响应以及访问令牌。
    13. 客户端会在下次请求时将访问令牌发送到 api服务器
    14. API服务器检查访问令牌是否有效并作出响应。
    15. 当访问令牌过期时,系统会要求客户端再次登录。
    16. 现在,这如何保护您的API?

      将需要安全性的部分作为登录访问它们。如果发出请求的客户没有登录到您的api,请将他发送到图表的第2步。

      那什么是nonce?时间戳吗

      如果有人窃取访问令牌,只要访问令牌过期,他就可以访问 API服务器。因此,当用户请求页面时,服务器向他发回存储在服务器中的随机数。客户使用收到的现时签署请求并完成请求。由于nonce仅使用一次,因此服务器删除nonce。当攻击者抓取nonce并向服务器发出虚假请求时,服务器拒绝该请求,因为一次性号码已经无效,因此已经使用了。

      TimeStamp用于标识创建令牌或随机数的时间,用于在有限的时间范围内(1-2秒)使令牌或随机数到期,这是请求完成所需的时间。