想改善这个问题吗?更新问题,使其仅通过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:一个数字或字符串,只能使用一次。
来源: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秒)内使令牌或随机数到期,即完成请求所需的时间。