Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。

4年前关闭。



Improve this question





我有移动应用程序REST API调用,这些调用可以直接到达我的服务器,而没有任何令牌或安全机制。

我想保护我的API调用。我试图了解什么是OAuth,以及它如何保护我的移动应用程序REST API调用的安全性?

我也想详细了解OAuth中使用的以下字段。从这里我将得到下面的字段。

Consumer Key
Consumer Secret
Token
Token Secret
Timestamp
Nonce

最佳答案

由于大多数提供程序都使用OAuth 2.0,并且主要提供程序已弃用OAuth 1.0,因此我将解释OAuth2.0

什么是OAuth?

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

您可以实现自己的OAuth服务器,在这里我将解释有关社交身份验证的信息。因此,此处的OAuth一词是指具有OAuth的社交身份验证。


用外行术语来说,OAuth允许用户使用帐户(Facebook,Google等)登录到您的Web服务。


术语:


客户端:您的API的用户。
资源所有者(API服务器):您的API
授权服务器(身份验证服务器):Facebook / Google等身份验证服务器。
授权授权:您授权用户的方法。我们在这里使用授权代码。
授权代码:验证服务器返回给客户端的代码,可以在api服务器上将其交换为访问令牌。
访问令牌:标识用户的字符串,通常带有有效期。
使用者密钥或APP_ID:身份验证服务器用来标识您的应用程序的公共密钥。
消费者秘密或APP_SECRET:应保密的私钥。


以下术语与OAuth无关,但与OAuth结合使用可使其更加安全。


时间戳记:一个指示日期和时间的字符串。
Nonce:一个数字或字符串,只能使用一次。


api - 什么是OAuth,它如何保护REST API调用?-LMLPHP
来源:http://smerity.com/

我将以Facebook登录为例来说明该图。

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


您在Facebook开发人员门户上注册了一个应用程序。
Facebook为您提供了两个代码,1)一个secret_key和2)一个app_id
您设计了一个显示Login with Facebook的按钮。


现在是图。


客户端请求API服务器。
API服务器重定向到登录页面说。 To access the data: please login with facebook to access the page
用户单击login with Facbook按钮,将打开一个新的弹出窗口OAuth dialog。询问Facebook用户名和密码。
用户输入他的用户名和密码,然后允许访问您的应用程序。身份验证服务器使用URL中的代码作为参数将用户重定向到您的网站。
在步骤4中调用API服务器,API服务器从URL捕获代码。
具有提供的client_secret的API服务器调用身份验证服务器
Auth服务器返回到access token,供用户使用API​​服务器。
API服务器向身份验证服务器询问给定access token的用户信息。
Auth Server返回有关用户,个人资料图片,电子邮件等的详细信息。
API服务器识别用户,将响应以及访问令牌发送给他。
客户端在下一个请求时将访问令牌发送到api服务器。
API服务器检查访问令牌是否有效并做出响应。
访问令牌过期后,将要求客户端再次登录。


现在,这如何保护您的api?

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

那么,nonce是什么?时间戳?

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

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

10-08 14:00
查看更多