在设计其余API或服务是否有任何建立最佳做法,为处理与安全(授权、认证身份管理)?

当建立一个肥皂API你有WS-安全作为一个指南和多文献中存在关于该主题。我们发现小的信息,确保其余的终结点。

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

任何讨论或链接到有关文件将非常赞赏。如果它的事项,我们将使用WCF与痘/JSON化的消息,为我们其余API的/服务的使用v3。5.净框架。

有帮助吗?

解决方案

作为tweakt所述,亚马逊S3是一个很好的模型的工作。他们要求的签名确实有一些特点(如纳入一个时间戳),帮助保护对两种意外、恶意要求重新播放.

好的事关于HTTP基本的是,几乎所有HTTP图书馆的支持。你会的,当然,需要SSL在这种情况下,因为发送密码的明文在网络是几乎普遍一件坏事。基本是最好的摘要时采用SSL,因为即使该呼叫者已经知道,全权证书,摘要需要一个额外的往返交换的现时值。有了基本的,打电话者简单的发送的凭据的第一次。

一旦客户的身份是建立、授权实际上只是一种执行问题。但是,你可以委托授权的其他一些组成部分与现有的授权模型。再次好的事关基本的这是你的服务器的结束了明文的副本客户的密码你可以简单地传递给另一个组件在你的基础设施的需要。

其他提示

有没有标准对其余的其他比HTTP。有建立其余的服务。我建议你看一看他们,并得到的感觉如何,他们的工作。

例如,我们借了很多想法来自亚马逊的S3其他服务时,开发我们自己。但是,我们选择不使用更先进的安全模式的基础上请求的签名。更简单的方法是HTTP基本证SSL。你必须决定什么最适合你的情况。

此外,我强烈推荐这本书 宁静的网服务 从O'reilly.它解释了核心概念,并提供一些最佳做法。你可以一般采取的模式,他们提供地图,它以自己的应用程序。

你可能还想要看看 保护身份验证, ,一个新兴的公开协议为基于标记授权专门针对http api。

它非常类似于所采取的做法 flickr记住牛奶 "休息"api(不一定是很好的例子的宁静api,但是很好的例子的基于标记的方法)。

那是一个伟大的清单上找到 :

身份验证

  • 不要重新发明轮子在身份验证、标记的产生,密码存储。使用的标准。

  • 使用 Max Retry 和坐牢的特征在登录。

  • 使用加密在所有敏感数据。

智威汤逊(JSON网令牌)

  • 使用随机的复杂关键(智威汤逊的秘密)来使强迫的令牌非常困难的。

  • 不算法从中提取有效载荷。力量的算法在后台(HS256或RS256).

  • 让牌过期(TTL, RTTL)尽可能短。

  • 不存储敏感数据 JWT 有效载荷,它可以被解码很容易。

保护身份验证

  • 始终验证 redirect_uri 服务器方允许只列入白名单的网址。

  • 总是试图换代码并不令牌(不允许 response_type=token).

  • 使用国参与的一个随机的散列防止 CSRFOAuth 身份验证过程。

  • 定义默认的范围,并验证范围的参数为各个应用程序。

访问

  • 限的请求(限制),以避免DDoS/暴力攻击。

  • 使用HTTPS server侧为了避免中间人(中间人的攻击)

  • 使用 HSTS 头SSL避免SSL条的攻击。

输入

  • 使用适当HTTP方法根据的操作: GET (读), POST (创建), PUT/PATCH (替换/更新),以及 DELETE (删除记录),并回应 405 Method Not Allowed 如果所请求的方法不适合于所请求的资源。

  • 验证的内容类型的要求 Accept 头部(内容的协商),以允许只有你的支持的格式(例如 application/xml, application/json, 等)和回应 406 Not Acceptable 反应,如果不匹配。

  • 验证 content-type 张贴的数据为你接受(例如 application/x-www-form-urlencoded, multipart/form-data, application/json, 等等)。

  • 验证用户输入,以避免共同的脆弱性(例如XSS,SQL-注射远程执行代码等)。

  • 不要使用任何敏感的数据(凭证、密码的安全标记,或API钥匙)的网址,但使用标准 Authorization 头。

  • 使用API关服务,以启用缓存, Rate Limit 政策(例如配额、尖峰逮捕,并发率限制),并部署Api资源的动态。

处理

  • 检查所有的终端都受到保护的背后认证,以避免破碎的身份验证过程。

  • 用自己的资源编号应该是可以避免的。使用/me/命令,而不是/用户/654321/令。

  • 不自动增加标识。使用usb驱代替。

  • 如果你分析XML文件,确保实体的分析是不能避免XXE(XML外部实体的攻击).

  • 如果你分析XML文件,确保实体的扩展是不能避免亿笑/XML炸弹通过指数扩展实体的攻击。

  • 使用CDN的文件上传。

  • 如果你正在处理大量的数据,使用工作人员和排队过程中尽可能多的背景以及返回的响应快,以避免HTTP阻止。

  • 不要忘了打开 调试 模式关闭。

输出

  • 发送 X-Content-Type-Options: nosniff 头。

  • 发送 X-Frame-Options: deny 头。

  • 发送 Content-Security-Policy: default-src 'none' 头。

  • 删除指纹头的- X-Powered-By, Server, X-AspNet-Version 等等。

  • content-type 对于你的反应,如果返回 application/json 然后你的反应内容的类型 application/json.

  • 不返回等敏感数据凭证、密码的安全标记。

  • 返回的适当地位代码的根据的操作完成。(例如 200 OK, 400 Bad Request, 401 Unauthorized, 405 Method Not Allowed, 等等)。

我有点惊讶SSL与客户证书没有被提及。当然,这种方法唯一真正有用的,如果你可以依靠的社区的用户识别证书。但是,一些国家的政府/公司来做的问题,他们对他们的用户。用户不必担心创造另一个用户名/密码组合和身份是建立在每个连接,以便通信与服务器可以是完全无国籍,没有用户会议所需要的。(不意味着任何的所有其他的解决方案所提到的需要的会议)

每个人都在回答这些问题已被忽视的真正的访问控制/授权。

举例来说如果你的休息Api/网络服务是关于发布/歌厅的医疗记录,则可能需要定义的访问控制前关于谁可以访问的数据,并在其下情况。例如:

  • 医生可以得到的医疗记录的患者他们的照顾关系
  • 没有人可以发布医疗数据之外做法时(例如9 5)
  • 终端用户可以得到的医疗记录他们拥有或医疗记录的患者对他们的监护人
  • 护士可以更新的医疗记录的患者属于同一单位为护士。

为了定义和执行这些微粒的授权,将需要使用一个基于属性的接入控制的语言,称为XACML,扩展接入控制标记语言。

其他标准在这里是为如下:

  • 保护身份验证:身份证。联邦和国代表团的授权,例如让一个服务法》,我的代表在另一个服务(Facebook可以张贴到我的Twitter)
  • CA:身份联合会/网SSO。CA是非常关谁的用户。
  • WS-安全/WS-*标准:这些重点之间的通信肥皂服务。他们是具体的应用程序级信息格式(SOAP)和他们处理的多个方面,例如消息可靠性、安全性、保密性、完整性、原子性、事件...没有复盖的访问控制和所有特肥皂。

XACML是技术无关。它可以应用于java应用.净,Python,Ruby...网络服务,其余的Api,以及更多。

以下是有趣的资源:

我用来护身份验证的几倍,并且还使用其他一些方法(基本/摘要)。我衷心表明保护身份验证.下面的链接是最好的教程中,我们看到在使用保护身份验证:

http://hueniverse.com/oauth/guide/

一个最好的职位,我曾经遇到过关于安全,因为它涉及其余部分是在 1雨滴.MySpace API的使用保护身份验证,也对安全与你已经完全进入他们自定义通道在RestChess代码,这是我做了很多探索与。这是演示会在混音,你可以找张贴 在这里,.

谢谢你的出色建议。我们最终采用一个定义HTTP头来通过身份标识从客户的服务,在准备将我们的宁静的API与即将举行尔马身份的框架。我所描述的问题 在这里, 和我们的解决方案 在这里,.我也花了 tweakt's的建议和买了 宁静的网服务 -一个很好的书,如果你正在建立一个宁静的API的任何一种。

异(开放的网络应用程序安全项目)有一些作弊表复盖有关的所有方面的网络应用程序开发。这个项目是一个非常宝贵和可靠的信息来源。关于其余的服务你可以查看这个: https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

我会推荐的护身份验证的2/3。你可以找到更多的信息 http://oauth.net/2/

我搜索了很多关于宁静的ws安全,我们也结束了使用令通过cookie从客户服务器验证的请求。我用弹簧安全的授权请求在服务,因为我不得不进行身份验证和授权的每一请求的基础上指定的安全政策,已经在数据库。

事实上,肥皂的世界是很好复盖着安全标准并不意味着它是安全的默认。在首位,这些标准是 非常 复杂。复杂是不是一个很好的朋友的安全和执行中的漏洞,例如 XML签名的包装攻击 是当地特有的在这里。

为。网络环境下,我不会有太大的帮助,但是 "建立网络服务与Java" (a砖-10的作者)有没有帮我 很多 在了解WS-*安全架构,特别是其怪癖。

其余本身没有提供任何安全标准,但事情就像护身份验证和CA正在迅速成为该标准在这个空间。然而,认证和授权都只有一小部分的你需要什么,要考虑。许多已知的弱点的有关网络应用程序适用于很多其他api。你必须要考虑输入确认,会议开裂的、不适当的错误消息,内部员工的脆弱性等。这是一个很大的问题。

我想添加(在线与stinkeymatt),最简单的解决办法是添加SSL certificates到你的网站。换句话说,确保您的网址是HTTP://.这将涵盖的运输安全(爆炸的降压).与宁静的网址,想法是让它简单的(不同于WS*安全/CA),可以使用 oAuth2/openID连接 或者甚至基本的认证(在简单案件)。但是你仍然需要SSL/HTTPS。请检查ASP.NET 网API2的安全在这里: http://www.asp.net/web-api/overview/security (文章和视频)

作为@Nathan结束了,这是一个简单HTTP头,以及一些曾经说OAuth2和客户的侧SSL证书。它的要旨是这个...你的休息API不应该处理的安全因为这真的应该的范围之外。

而不是一个安全层应放在它上面,是否这是一个HTTP头背后一个网代理(一个共同的方法,像SiteMinder,马特或甚至Apache HTTPd),或者作为复杂,因为护身份验证2.

关键是要求应当工作没有任何最终用户相互作用。所有这一切需要的是确保连接到其他API是通过身份验证。在Java EE我们的概念 userPrincipal 这可以获得一个 HttpServletRequest.它还设法在部署描述这一URL模式可以是安全,使其余的代码不需要检查了。

在WCF世界,我会用 ServiceSecurityContext.Current 获得当前的安全环境。你需要配置申请,要求认证。

有一个例外的发言我不得不上这是使用数,以防止比赛(其中可以攻击或刚刚有人提出同一数据的两倍)。该部只能处理在应用层。

对于网络的应用程序安全,你应该看看异(https://www.owasp.org/index.php/Main_Page)提供备忘,用于各种安全的攻击。你可以将许多措施尽可能安全的应用程序。相对于API安全(授权、认证、身份管理),有多种方式为已经提到的(基本、摘要和保护身份验证).有环孔OAuth1.0,因此可以使用OAuth1.0a(OAuth2.0不是广泛采用由于问题的规范)

它已经有一段时间,但问题仍然是相关的,尽管答案可能已经改变了一点。

API网关将是一个灵活和高度可配置的解决方案。我测试和使用 相当多的,真的很喜欢我看到的是什么港提供了一个管理其他API其自己的,你可以用它来管理用户。

快-网关。io 更近期,也是一个API网关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top