在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践?
构建SOAP API时,您需要使用WS-Security作为指南,并且有很多关于该主题的文献.我发现有关保护REST端点的信息较少.
虽然我理解REST故意没有规格类似于WS-*我希望最佳做法或建议的模式已经出现.
任何讨论或相关文件的链接将非常感谢.如果它的事项,我们将使用WCF与我们的REST API的/服务POX/JSON序列信息使用.NET Framework V3.5的建立.
RESTful身份验证的含义是什么?它是如何工作的?我无法在Google上找到一个很好的概述.我唯一的理解是你在URL中传递会话密钥(remeberal),但这可能是非常错误的.
背景:
我正在为REST Web服务设计身份验证方案.这并非"真正"需要安全(它更像是一个个人项目),但我希望尽可能安全地将其作为锻炼/学习体验.我不想使用SSL,因为我不想要麻烦,而且主要是设置它的费用.
这些SO问题对我开始特别有用:
我正在考虑使用简化版的Amazon S3身份验证(我喜欢OAuth,但它似乎对我的需求来说太复杂了).我正在为请求添加由服务器提供的随机生成的nonce,以防止重放攻击.
要回答这个问题:
S3和OAuth都依赖于对请求URL进行签名以及一些选定的标头.他们都没有签署 POST或PUT请求的请求体.这是不是容易受到中间人攻击,它会保留url和header并用攻击者想要的任何数据替换请求体?
看起来我可以通过在被签名的字符串中包含请求主体的哈希来防止这种情况.这样安全吗?
以下答案来自这个问题;
获奖答案实际上并未解决问题.它仅在数据传输的上下文中提及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窃取并被其他人使用!)
每当我提出这个问题时,我都会得到答复."嗯..你发送一个令牌,但服务器不知道谁发送令牌,不是很安全"所以我理解这一点,因为浏览器保持一种认证,服务器知道哪里请求来自正确的地方然后我可以确定与该令牌配对的用户(从我的数据库检查)是"非常正确"
或者也许在这里讲的是不正确的
简短问题: 我在.NET中使用Web API服务,并且只使用HTML和AngularJS创建了一个站点.
如何仅通过我的网络授权我的服务?
我正在寻找一个似乎很常见的问题的安全答案,但事实并非如此.我在后期阅读了很多答案,想法和各种事情,但我找不到解决方案.
让我们假设我有一个来自MS的Web Api服务(最新的服务).所以我必须使用需要消耗它的应用程序.我们来定义两个场景.
场景1:
在同一个IIS中,我有一个ASP.NET MVC 3/4,其特点是所有MVC工作都在客户端,由AngularJS制作,因此App直接从JavaScript指向Web Api服务.
场景2:
我有一个第三方应用程序直接指向Web Api服务,并且位于其他网络/站点/任何但相关的任何内容.
所以,我的问题是:
如何验证两个系统,以便Web Api服务提供对两个系统的访问(我不在乎是否相同),并且不向例如具有REST客户端的人提供访问权限,并且登录到具有用户/通行证授权的网站?我希望这两个例子都能说明我感兴趣的观点.
请在下面评论您需要以更好的方式改进此问题!
顺便说一句,不,不能使用混淆.我想像一个令人耳目一新的令牌,但我无法想象.