什么是OAuth?它如何保护RESTAPI调用?

什么是OAuth?它如何保护RESTAPI调用?,api,rest,authentication,oauth,oauth-2.0,Api,Rest,Authentication,Oauth,Oauth 2.0,我有移动应用程序RESTAPI调用,它在没有任何令牌或安全机制的情况下访问我的服务器 我想保护我的API调用。我试图了解什么是OAuth,以及它将如何保护我的移动应用程序RESTAPI调用,这些调用将影响到我的服务器 我还想详细了解OAuth中使用的以下字段。从那里我将得到下面的领域 Consumer Key Consumer Secret Token Token Secret Timestamp Nonce 由于大多数提供程序使用OAuth 2.0,而OAuth 1.0已被主要提供程序弃用,

我有移动应用程序RESTAPI调用,它在没有任何令牌或安全机制的情况下访问我的服务器

我想保护我的API调用。我试图了解什么是OAuth,以及它将如何保护我的移动应用程序RESTAPI调用,这些调用将影响到我的服务器

我还想详细了解OAuth中使用的以下字段。从那里我将得到下面的领域

Consumer Key
Consumer Secret
Token
Token Secret
Timestamp
Nonce

由于大多数提供程序使用OAuth 2.0,而OAuth 1.0已被主要提供程序弃用,因此我将解释OAuth 2.0

什么是OAuth? OAuth是一种开放的授权标准,通常用于互联网用户使用其Microsoft、Google、Facebook、Twitter、One Network等帐户登录第三方网站,而无需公开其密码

您可以实现自己的OAuth服务器,这里我将解释有关social auth的内容。所以这里的术语OAuth是指具有OAuth的社会身份

用外行的话说,OAuth允许用户使用帐户(Facebook、Google等)登录到您的web服务

术语:
  • 客户端:API的用户
  • 资源所有者(api服务器):您的api
  • 授权服务器(身份验证服务器):Facebook/Google等身份验证服务器
  • 授权授予:授权用户的方法。我们在这里使用授权码
  • 授权代码:授权服务器返回给客户端的代码,可以在api服务器上交换访问令牌
  • 访问令牌:标识用户的字符串,通常带有有效期
  • 用户密钥或应用程序ID:身份验证服务器用于标识应用程序的公钥
  • 消费者机密或应用程序机密:应保密的私钥
以下术语与OAuth无关,但用于OAuth以使其更安全

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

资料来源:

我将以Facebook登录为例解释该图

背景。 在解释图表之前,请考虑您已经做了下面的工作。
  • 你在Facebook开发者门户注册了一个应用
  • Facebook为您提供了两个代码,1)一个
    密钥
    和2)一个
    应用程序id
  • 你设计了一个按钮,上面写着“登录Facebook”
  • 现在是图表

  • 客户端请求API服务器
  • API服务器重定向到登录页面
    访问数据:请登录facebook访问页面
  • 用户点击
    login with Facbook
    按钮,一个新弹出的
    OAuth对话框打开。询问facebook用户名和密码
    
  • 用户输入用户名和密码,然后允许访问您的应用程序auth server使用URL中的代码作为参数,将用户重定向到您的网站
  • API服务器在步骤4上被调用,API服务器从URL捕获代码
  • API服务器使用提供的
    client\u secret
  • Auth server返回用户对API服务器的
    访问令牌
  • API服务器询问身份验证服务器有关给定
    访问令牌的用户信息
  • Auth Server返回有关用户、个人资料图片、电子邮件等的详细信息
  • API服务器识别用户,将响应与访问令牌一起发送给他
  • 客户端在下一次请求时将访问令牌发送到api服务器
  • API服务器检查访问令牌是否有效并作出响应
  • 当访问令牌过期时,客户端被要求再次登录
  • 现在,这是如何保护您的api的?

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

    那么什么是nonce?时间戳?

    如果有人盗取访问令牌,只要访问令牌过期,他就可以访问API服务器。所以,当用户请求一个页面时,服务器会向他发回一个存储在服务器中的nonce。客户端使用收到的nonce对请求进行签名并完成请求。由于nonce只使用一次,服务器将删除该nonce。当攻击者获取nonce并向服务器发出虚假请求时,服务器会拒绝该请求,因为一次性号码已被使用,因此无效


    时间戳用于标识创建令牌或nonce的时间,用于在有限的时间范围(1-2秒)内使令牌或nonce过期,完成请求所需的时间。

    阅读oauth规范。我阅读了它,但没有得到它,这就是我为什么在这里发布问题的原因……你能与我分享oauth的链接,以及如何在移动应用程序中实现这一点以保护api吗?关于这种方法,在安全方面,我有一个问题。如果来自Facebook的代码作为参数发送到URL,难道一些恶意代码不能捕获这些代码并使用这些代码来验证自己是否是其他人吗?@Bolboa任何可以访问网络包和日志的人都可以捕获这些代码,所以请使用HTTPS。由于该代码是为特定应用程序(我们的应用程序)的特定用户生成的,因此该代码不能用于对任何其他应用程序的任何其他用户进行身份验证,这是使用机密应用程序凭据的地方。Facebook内部构件;)@如果我有一个仅由我的前端客户使用的REST API,那么我可以在没有oAuth的情况下使用REST API吗