相关疑难解决方法(0)

保护REST API/Web服务的最佳实践

在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践?

构建SOAP API时,您需要使用WS-Security作为指南,并且有很多关于该主题的文献.我发现有关保护REST端点的信息较少.

虽然我理解REST故意没有规格类似于WS-*我希望最佳做法或建议的模式已经出现.

任何讨论或相关文件的链接将非常感谢.如果它的事项,我们将使用WCF与我们的REST API的/服务POX/JSON序列信息使用.NET Framework V3.5的建立.

security rest wcf authorization rest-security

828
推荐指数
15
解决办法
31万
查看次数

RESTful身份验证

RESTful身份验证的含义是什么?它是如何工作的?我无法在Google上找到一个很好的概述.我唯一的理解是你在URL中传递会话密钥(remeberal),但这可能是非常错误的.

authentication rest restful-authentication rest-security

726
推荐指数
11
解决办法
39万
查看次数

REST API身份验证

我正在构建一个将托管在服务器上的应用程序.我想为应用程序构建一个API,以便于与任何平台(Web App,Mobile App)进行交互.我不理解的是,在使用REST API时,我们如何对用户进行身份验证.

例如,当用户已登录然后想要创建论坛主题时.我怎么知道用户已经登录?

api rest

180
推荐指数
4
解决办法
20万
查看次数

最好的SOAP/REST/RPC Web API示例?你为什么喜欢他们?他们有什么问题?

在我的公司,我们开始分支到Web API来访问和更新我们的数据; 最初是为了合作伙伴,但未来很可能对公众有利.目前API的外观(例如SOAP,REST,RPC)是完全开放的,我们还没有做出任何决定,所以我对人们认为很好的Web API的例子以及你为什么这么认为感兴趣那.

我感兴趣的是使用不同语言的人的意见(我们可能会向使用多种平台的人提供API,特别是包括.NET,Java,ActionScript和JavaScript)关于您认为好的Web API例子,你有很好的经验.

我想谈谈的一些观点:

  1. 您更喜欢SOAP类型服务还是REST/RPC风格服务?我怀疑拥有平台支持的人(例如.NET,Java)会更喜欢SOAP,而使用没有平台支持的语言的人会更喜欢其他人,但我想验证这个假设.

  2. 您是否关心API是否实际上是REST还是它是一个普通的旧式RPC GET/POST?如果是这样,你为什么关心?API是否正确描述自身(即,如果它是RPC样式,并不声称是RESTful)更重要,而不是它实际上是两者之一吗?

  3. 我们需要验证谁在使用该服务.我一直在研究Amazon S3身份验证,它使用公共标识符和私有令牌,用于将请求的参数哈希到验证令牌中(这也类似于flickr).您以前是否使用过这种类型的身份验证,以及如何继续使用它?您是否发现有问题的哈希算法(即您的平台不支持)?您希望在HTTP标头或URI中发送散列吗?

  4. 如何处理版本控制?有一个/v1/类型子目录以便可以同时添加未来的版本,或者你会做一些不同的事情,如请求有效负载或查询中的版本,这是一个好主意吗?您期望支持的API版本需要多长时间(例如,如果引入了v2,那么您在v1的生命周期内的期望是什么).

此外,任何其他意见和要点将有用.

我故意对我们正在实施的API的实际类型保持模糊,因为我正在寻找人们认为好的API和实现机制的一般指导,所以这篇文章及其答案对更多人有用在将来.


注意:我已搜索过,无法找到关于此的一般性问题 - 它们似乎都特定于某种类型的API - 但如果它是重复的,请告诉我.此外,如果它应该是社区维基(我认为人们应该得到答案的信用,所以我没有做到一个)然后请让我知道,我会改变它.

rest rpc soap web-services

48
推荐指数
3
解决办法
2万
查看次数

HTTP基本身份验证而不是TLS客户端认证

以下答案来自这个问题;

获奖答案实际上并未解决问题.它仅在数据传输的上下文中提及SSL,并不实际涵盖身份验证.

您真的要求安全地验证REST API客户端.除非您使用TLS客户端身份验证,否则SSL本身不是REST API的可行身份验证机制.没有客户端authc的SSL仅对服务器进行身份验证,这与大多数REST API无关.

如果您不使用TLS客户端身份验证,则需要使用类似基于摘要的身份验证方案(如Amazon Web Service的自定义方案)或OAuth甚至HTTP基本身份验证(但仅限于SSL).

因此,考虑到我将使用HTTPS而无需客户端认证 我的问题是海报说如果我们不使用客户端SSL认证服务器并不真正知道它与谁交谈.我在这里理解的是,如果我使用身份验证令牌来访问服务器对客户端进行身份验证.然后,即使该令牌与我的服务器数据库中的用户ID配对,服务器也不知道谁正在发送令牌.

首先

1 - 这是一个真正的问题吗?如果我特别使用Https?(没有TLS客户端身份验证)

2-而且最重要的是,假设这是一个重要的安全缺陷; Http基本身份验证如何在海报中提到帮助?Http基本身份验证只是在标头中发送编码的用户名密码.因此,当客户端收到一个令牌(在他发送用户名密码后作为回报),然后对于其余的请求,他将在此标头中使用此令牌而不是密码,一切都很好吗?

仍然服务器不知道请求来自何处,也许服务器在其数据库中具有匹配用户的有效令牌但未知谁真正发送它.(虽然我仍然很难看到令牌会被https窃取并被其他人使用!)

每当我提出这个问题时,我都会得到答复."嗯..你发送一个令牌,但服务器不知道谁发送令牌,不是很安全"所以我理解这一点,因为浏览器保持一种认证,服务器知道哪里请求来自正确的地方然后我可以确定与该令牌配对的用户(从我的数据库检查)是"非常正确"

或者也许在这里讲的是不正确的

java security authentication rest web-services

26
推荐指数
3
解决办法
2万
查看次数

如何在REST Web服务中对用户进行身份验证?

如何在REST Web服务中编写用户身份验证方法?我是Web服务的初学者.

methods rest restful-authentication

14
推荐指数
1
解决办法
2万
查看次数

如何管理从调用Play2!-Scala REST服务的本机移动应用程序发送的用户请求的身份验证/授权

我一直在深入研究Play2!Scala文档,关于为用户请求实现身份验证/授权的可能方法,我必须说我有点迷失.我想了解更多有关如何通过Play2!Scala支持的REST服务对移动设备发送的请求进行身份验证/授权的信息.

首先,Play2/scala似乎有很多auth-modules:例如t2v的Play20-auth.但问题是,这些解决方案基于在客户端存储cookie.是对的吗 ?这在纯粹的Web透视图中是有意义的:请求从浏览器发送,服务器可以在客户端上存储cookie等.

现在,如果我有一个原生移动应用程序(在IOS或Android上),我只是调用由Play2!Scala应用程序支持的REST服务.在这种情况下,我没有使用浏览器,因此服务器无法在客户端应用程序上存储cookie.

我还可以使用像t2v的Play20-auth这样模块进行授权/认证吗?

处理这类事情的最佳做法是什么?

任何帮助真的很感激,提前谢谢,

authentication android scala playframework-2.0

10
推荐指数
1
解决办法
6060
查看次数

使用Flask-Security对REST API进行身份验证

我正在使用Flask-Security构建一个具有公共REST API的Web应用程序.我试图找出如何仅使用REST调用添加用户注册和登录.使用创建用户相当容易user_datastore.create_user.但是,如何使用REST调用登录用户?
如果使用flask_security.utils.login_user用户名+密码或令牌作为参数,这将很容易,但它需要一个用户对象?该文档显示了如何使用表单和视图进行注册和登录,但我需要能够从IOS设备注册和登录(使用RESTkit).

python rest flask flask-login flask-security

7
推荐指数
1
解决办法
7526
查看次数

REST身份验证究竟在哪里使用?

我已经读了好几个小时,但未能找到清晰易懂的解释.REST身份验证究竟在哪里使用?

  • 在浏览器和服务器之间(替换像PHP会话/浏览器cookie组合的东西)?
  • 服务器和其他服务器之间?
  • 在同一台服务器上的节点/模块之间?

假设我正在从头开发一个系统,而不是在服务器端有一些单片MVC,我想使用twitter的例子 - 制作"所有东西REST" - 分布式独立模块系统通过REST相互通信.然后还可以在浏览器和服务器之间使用REST(身份验证)吗?

openid rest oauth

5
推荐指数
1
解决办法
151
查看次数

通用的方式来验证客户端并保护RESTful api

我一直在挖掘stackoverflow/security.stackexchange线程,并没有明确的答案为客户提供一种通用的方式来安全地使用我正在通过asp.net的web api构建的RESTful服务.在搜索这个答案时,我看到"授权"和"身份验证"可以互换使用,所以我想指出我只想验证请求身份和合法性.所以,在这一点上,我不是在验证用户.

亚马逊的模型似乎是"滚动你自己"时引用的模型,但是,在这种情况下,我确实理解亚马逊已经提供了每篇论文的"论文",所以这里没有太多的重新发明.这篇文章, 设计一个没有OAuth的安全REST(Web)API,非常有帮助.

我收集的是:

  1. 应用程序必须要求SSL请求,因此应拒绝" http://myapi.com/users/1 "上的GET,并提供错误的请求响应,以便开发人员知道需要https.
  2. 客户必须提供应用密钥/密钥以验证他们是谁.
  3. SSL +证书是个好主意
  4. 需要nonce值
  5. 当客户注册他们的应用程序时,需要输入URL和IP,他们将在收到请求时发送请求以进行验证.我对此的关注是外部应用程序的可移植性,即应用程序被移动到具有不同IP的新服务器,现在它不起作用.

我对2的问题很少,或许,我的思绪无法绕过.首先,不是应该保密的app秘密吗?那么,如果一个javascript客户端发出请求,这不会影响app密钥的保密性吗?为什么有一个应用秘密然后我可以通过验证应用密钥,现时值和服务器IP验证请求身份?我确实理解像php,ruby或c#.net这样的服务器端语言不会暴露这个秘密,但我希望这对JS和编译语言来说都是普遍安全的.

最后,Facebook有一个开发人员安全检查表告诉开发人员"永远不要在客户端或可编译代码中包含你的App Secret",这会向我建议加密的web.config等.此解决方案不适用于将REST服务暴露给通过javascript消费的任何人.

其他线程我已经通过梳理:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
https://developers.facebook.com/docs/facebook-login/安全性/
保护REST API/Web服务的最佳实践
REST身份验证方案的安全性
HTTP基本身份验证而不是TLS客户端认证
RESTful身份验证

security authentication api rest ssl

5
推荐指数
1
解决办法
2746
查看次数