我已经阅读了有关oAuth,Amazon REST API,HTTP Basic / Digest等的信息,但无法将其全部整合为“单个”。 这可能是最接近的情况- 为移动应用程序创建API-身份验证和授权

我想建立以API为中心的网站-服务。 因此(一开始)我将在中心拥有一个API,而网站 (PHP + MySQL)将通过cURLAndroidiPhone通过它们的网络接口进行连接。 所以3个主要客户-3个API密钥。 其他开发人员也可以通过API接口进行开发,他们将获得自己的API密钥。 根据用户级别的状态,API操作将被接受/拒绝,如果我是管理员,则可以删除任何内容,等等,其他所有操作都只能操作其本地(帐户)数据。

首先,授权-我应该使用oAuth + xAuth还是我自己的某种实现(请参阅http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html?r=9197 )? 据我了解, Amazon服务用户是== API用户(具有API密钥) 在我的服务中,我需要区分标准用户/帐户(在网站上注册的用户)和开发者帐户(应具有其API密钥)。

因此,我首先需要授权API密钥 ,然后再验证用户本身。 如果我使用亚马逊的方案来检查开发人员的API密钥(授权他们的应用程序),那么我应该使用哪个sheme进行用户身份验证?

在(通过HTTPS ,HTTP Basic)发布我的用户名和密码,然后在随后的每个请求api.example.org/auth之后,我了解了有关通过api.example.org/auth获取令牌的信息。 如果我同时在Android网站上登录,如何管理令牌? 如果我仅在第一个请求(传输用户名和密码时使用SSL)并且仅在其他请求上使用HTTP时,使用中间人攻击怎么办? 在此示例中, 密码保护REST服务不是问题吗?

===============>>#1 票数:123 已采纳

总而言之,保护密钥的最佳方法是不传输密钥。

也就是说,我们通常使用一种方案,其中每个“ API密钥”都有两个部分:非秘密ID(例如1234)和秘密密钥(例如byte [64])。

  • 如果提供API密钥,请将其(加盐和散列)存储在服务的数据库中。
  • 如果提供用户帐户(受密码保护),则将密码(加盐和散列)存储在服务的数据库中

现在,当消费者首次访问您的API进行连接时,请他

  • 发送“用户名”参数(“ john.doe”不是秘密)
  • 发送“ APIkeyID”参数(“ 1234”,不是秘密)

还给他

  • 数据库中的盐(如果其中一个参数错误,只需返回一些可重复的盐-例如sha1(username +“ notverysecret”)。
  • 服务器的时间戳

消费者应在会话期间存储盐,以使事情变得快速顺畅,并且他应计算并保持客户端与服务器之间的时间偏移。

消费者现在应该计算API密钥和密码的哈希值。 这样,使用者就可以使用与存储在数据库中的密码和API密钥完全相同的哈希值,而不会遇到任何秘密问题。

现在,当消费者subseqently访问您的API,做实事,让他

  • 发送“用户名”参数(“ john.doe”不是秘密)
  • 发送“ APIkeyID”参数(“ 1234”,不是秘密)
  • 发送“ RequestSalt”参数(字节[64],随机,不是秘密)
  • 发送“ RequestTimestamp”参数(根据客户端时间和已知偏移量计算)
  • 发送“ RequestToken”参数(哈希(密码哈希+ request_salt + request_timestamp + apikeyhash))

服务器不应接受过去超过2秒钟的时间戳记,以使其免受重放攻击的影响。

服务器现在可以计算与客户端相同的哈希(passwordhash + request_salt + request_timestamp + apikeyhash),并确保

  • 客户端知道API密钥,
  • 客户知道正确的密码

  ask by svenkapudija translate from so

未解决问题?本站智能推荐:

1回复

REST API和安全性

我打算为基于javascript的Web应用程序和其他开发人员使用的API执行统一的JSON REST API。 我想做的是让我的js app使用用户名/密码对用户进行身份验证,并允许他们访问自己的私有资源。 当其他开发人员访问API时,我想允许他们访问公共资源(同时仍然能够跟踪他们的A
1回复

金融科技/银行应用程序上可能的API授权技术

假设我们已经实现了一个提供金融/银行服务的RESTful API,并希望将其提供给内部开发团队以实现本机移动客户端应用程序。 在这个意义上的应用,因此API将公共和触及的,所以什么获取访问它,需要在每一个可能的方式进行授权。 我想到的第一个解决方案是提供一个client_id和cli
2回复

RESTful API中的多个身份验证级别

脚本 我们正在为我们的Web应用程序构建一个新的RESTful API。 此API将为我们的移动应用程序,我们的Web应用程序和授权客户提供服 我们正在使用Apigility构建API,并正在使用它提供的OAuth2实现。 目前,我们的Web应用程序依赖于users表,并为每
1回复

经授权的PHP Rest API调用

简单的问题 我在哪里放“授权:不记名cajwune0fnr78ynj2kz6p8bad” 谢谢!
1回复

客户端应用程序的PHP REST API授权[重复]

可能重复: 宁静的API认证推荐? 我正在用PHP编写API,它选择使用Respect / REST。 这不是公共API,即只有授权的客户端应用程序才能在那里使用。 这就是我想知道如何保证API处理的信息安全性的地方。 客户端应用程序可以用任何语言编写,但正如我所说,应
2回复

Laravel在所有api路由中使用Web身份验证重定向到主目录

我想对所有api路由使用网络身份验证。 我创建了中间件,这就是它的样子 当我已经登录并且尝试向api路由发出请求时,它会将我重定向到主页。 我怎样才能解决这个问题 ? 这是config / auth.php 如果我已经登录,我不希望api路由重定向。我只想进行Web授权
1回复

正确实现RESTful API的资源授权

我的团队拥有我们使用Slim Framework用PHP编写的API。 网络应用程序和第三方移动应用程序正在使用它。 我们使用标准的OAuth 2工作流程来提供对我们资源的访问。 我们可以看到有人是否正在与API请求一起发送有效的访问令牌,并且流程的这一部分有意义。 我们遇到的绊
1回复

如何在私密和仅限会员的同时建立一个宁静的api?

回到巴黎的Symfony Live 2012,我很幸运地参与了“ 设计HTTP接口和RESTful Web服务 ”会议,关于如何构建RESTful API同时保持私有和仅成员的问题,我提出了许多问题。 目前我曾经生成一个API密钥来使我的API变为私有(我的意思是我自己可以使用第三方应用程
1回复

如何在rest api中验证/检查基本身份验证标头

我正在建造一个非常小的api。 在api中使用来自请求的基本认证头来认证请求。 这是我所做的代码 我将Authorization标题设为' Basic YXBpa2V5OmFqZWVzaA== '现在我将如何检查此基本授权标头是否有效? 我应该用username:password格
1回复

通过标头发送授权时出错

我正在使用PHP Restful Api进行测试,并且正在使用Chrome Advanced REST客户端和Postman,但问题是当我想通过api发送授权时,该api在localhost上可以正常运行,但是在公共服务器上可以正常运行标头,邮递员和高级其余客户都给我一个json响应,其中包括以