什么宁静的身份验证的意思是,它是如何工作的?我不能找到一个很好的概述。我唯一的理解是,你通过该届会议的关键(remeberal)的网址,但这可能是可怕的错误。

有帮助吗?

解决方案

如何处理认证在一个宁静的客户机-服务器结构是一个讨论的问题。

通常,可以实现的,在《奥氏法案》通过HTTP世界通过:

  • HTTP基本的身份验证通过HTTPS;
  • 饼干和会议管理;
  • 令牌在HTTP header(例如 保护身份验证 2.0+智威汤逊);
  • 查询身份验证与其他签署的参数。

你必须要相适应,或者甚至更好的组合这些技术,以配合你的软件架构的最好的。

每个认证方案有其自身的利弊,根据不同的目的,您的安全政策和软件结构。

HTTP基本的身份验证通过HTTPS

这一解决方案,根据该标准HTTPS协议,用于通过最网服务。

GET /spec.html HTTP/1.1
Host: www.example.org
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

这是容易实现,可通过默认的所有浏览器,但有一些已知的缺点,就像可怕的窗口身份验证浏览器上显示的,这将会持续存在(没有注销功能在这里)时,一些服务侧额外的CPU消费,而事实上,用户名称和密码传送(通过HTTPS)进入服务器(应当更加安全,让的密码只停留在客户方面,在键盘项, 并被储存作为安全的散列在服务器)。

我们可以使用 摘要的认证, ,但是它需要也HTTPS,因为它是脆弱的 MiM重播 攻击,并且是具体到HTTP。

会议通过的饼干

说实话,一会议管理服务器上的不是真正的无国籍状态。

一种可能性可能保持内的所有数据的饼干内容。并且,通过设计的,甜饼是处理服务器上面(客户,事实上,并甚至不试试解释这个饼干数据:它只是双手回到服务器上的每个连续的请求)。但是,这cookie数据的应用程序的国家数据,使客户应管理它,没有服务器,在一个纯粹的无国籍世界。

GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123

Cookie技术本身是HTTP联,所以它不是真的宁静,这应该协议独立的,恕我直言。它是脆弱的 MiM重播 攻击。

授予的通过令牌(OAuth2)

一个替代方案是把一个令牌在HTTP headers因此该请求是通过身份验证。这是什么 保护身份验证 2.0为的实例。看看 RFC6749:

 GET /resource/1 HTTP/1.1
 Host: example.com
 Authorization: Bearer mF_9.B5f-4.1JqM

总之,这是非常相似的饼干和遭受同样的问题:不无国籍,依靠HTTP发送的详细信息,并受到 很多的安全上的弱点 -包括MiM和重播-所以只能用过HTTPS。通常, 智威汤逊 被用作标记。

查询身份验证

查询的认证包括签署的每一个宁静的请求通过一些附加参数URI。看看 这个参考文章.

它被定义为这样的,在这篇文章:

所有其他查询,必须通过身份验证通过签订的查询参数 排序较低的情况,按字母顺序使用私人凭证 作为签署令牌。签署应该发生之前URL编码 query string.

这种技术也许是更加兼容的无国籍建筑,并且还可实施一个光届会议管理(采用在内存会议,而不是数据库的持久性).

例如,这里是一个一般URI样从上面的链接:

GET /object?apiKey=Qwerty2010

应当发送这样的:

GET /object?timestamp=1261496500&apiKey=Qwerty2010&signature=abcdef0123456789

串署名是 /object?apikey=Qwerty2010&timestamp=1261496500 和签名的SHA256散的字符串中使用私人成分的API关键。

服务器侧的高速缓存数据可随时可用。例如,在我们的框架内,我们缓的反应SQL水平,而不是在URI的水平。因此,增加这一额外的参数不断的高速缓存机制。

看看 这篇文章 对于一些细节关于宁静的身份验证,在我们的客户机-服务器奥姆/SOA/软框架,根据JSON和休息。因为我们允许进行通信不仅通过HTTP/1.1,但也叫管或GDI消息(当地),我们试图实现一个真正的宁静的认证模式,而不是依赖于HTTP特异性的(如头或cookie)。

注意后面:增加一个签名在URI可以被看作为不良做法(由于例如它会出现在http服务器记录),因此它必须得到缓解,例如通过一个适当的TTL,以避免重播。但如果你http日志正受到损害,则肯定会有更大的安全问题。

在实践中,即将到来 MAC令牌认证对于保护身份验证2.0 可能是一个巨大的改善相对于"所授予的令牌"目前的方案。但是,这仍然是一项正在进行的工作和绑HTTP传输。

结论

这是值得出结论认为,其余不仅仅是基于HTTP,即使在实践中,这也是主要实施过HTTP。其他部分可以使用其他通信层。所以宁静的身份验证是不只是一个代名词HTTP认证,无论谷歌的答案。它应该,甚至不使用HTTP机构所有,但应以抽象,从通信层。如果你使用HTTP通信,感谢 让我们加密倡议 没有理由不使用适当的HTTPS,这是需要另外,任何认证方案。

其他提示

我怀疑的人们热情高喊"HTTP认证"曾经试图制作一个基于浏览器的应用程序(而不是一个机器网服务),与其余部分(没有冒犯的意-我只是不认为他们曾经所面临的并发症).

问题是我发现的与使用HTTP证在宁静的服务产生HTML网页被视为在浏览器是:

  • 用户通常得到一个丑陋的浏览器作了登录框,这是非常不友好。你不能增加密码检索,帮助箱,等等。
  • 记录或记录在下一个不同的名称是一个问题,浏览器将继续发送证信息的网站,直到你靠近窗户
  • 超时是困难的

一个非常富有见解的文章,解决这些点点 在这里,, 但这个结果 很多 浏览器的具体javascript车呀,解决方法的解决方法,等等。因此,这也是不正向兼容,因此将需要不断维护作为新的浏览器被释放。我不认为清洁和清晰的设计,再加上我觉得这是一个很大的额外工作和头痛,只要这样我可以积极展示我的休息-徽章给我的朋友。

我相信cookie的解决方案。但是等等,饼干是邪恶的,不是吗?不,他们没有,该方式饼干是经常使用的是邪恶的。Cookie本身只是一片客户端的信息,就像HTTP身份验证的信息,浏览器就会跟踪而你浏览。和这片客户端的信息发送给服务器,在每一个请求,再次就像HTTP身份验证的信息。从概念上讲,唯一的区别是 的内容 这件作品的客户端的国家可以通过确定 服务器 作为其一部分的响应。

通过使会议的一个宁静的资源只有下列规则:

  • 一个 届会 地图的一个关键用户标识(以及可能的后行动的时间戳超时)
  • 如果一个 届会 存在,那么这意味着,关键是有效的。
  • 登录手段发布/会议,一个新的关键是设置为一个饼干
  • 注销装个性化/sessions/{键}(与重载后,请记住,我们是一浏览器,并HTML5很长的路要走)
  • 认证是通过发送的关键作为cookie在每一请求,并检查是否届会议存在,并且是有效的

唯一的区别HTTP身份验证,现在是认证的关键是由服务器生成并发送给客户不断发送回来,而不是客户计算从输入凭证。

converter42补充说,当使用https(这是我们应),重要的是,cookie将其安全标志的设置使得验证的信息是从来没有发送过一个非安全连接。大点没看到我自己。

我觉得这是一个充足的解决方案,正常工作,但我必须承认,我没有足够的安全专家,以确定潜在孔在这个计划-我所知道的是,数以百计的非宁静的网络应用程序使用基本相同的登录议定书》($_SESSION在PHP,HttpSession在Java EE,等等)。Cookie头内容是简单地使用的地址的服务器侧资源,就像一个接受的语言可能会被用于访问的翻译资源,等等。我觉得这是相同的,但也许其他人没有呢?你觉得怎么样,伙计们?

已经足够说关于这一主题通过良好的伙计们在这里。但这里是我的2美分。

有2种模式的相互作用:

  1. 人类对机器(HTM)
  2. 机器(MTM)

机器的共同标准,表示为其他Api,并将行为者/客户正的人或机器。

现在,在一个真正的宁静的架构,这一概念的无国籍状态意味着,所有相关应用程序的国家(这意味着客户的侧的国家)必须提供每一请求。通过相关的,这是意味着,任何所需的其余API处理的请求,并作出适当的反应。

当我们考虑这个上下文中的人机应用程序,"基于浏览器"作为Skrebbel指出上文所述,这意味着(web)应用程序运行在浏览器将需要发送其国家和相关的信息与每一个要求使得来的后端休息Api。

考虑这样的:你有一个数据/信息平台暴露的资产的剩余Api。也许你有一个自我服务BI平台,处理所有的数据方块。但你希望你的(人)客户访问这个通过(1)万维网应用程序,(2)移动应用程序,及(3)一些第3次缔约方应用程序。最后,即使链的MTMs导致了HTM。所以人类的用户保留在顶点的信息链。

在第2种情况,你有情况下对人机互动,信息实际上正在消耗的人类用户。在最后一种情况,你有一个机程序耗费其余Api。

这一概念的认证适用。你将如何设计这让你休息Api访问是在一个均匀,有担保的方式?我看到的这个,有2个方面:

方式1:

  1. 没有登录开始。每一请求执行的登录名
  2. 客户发送其确定的参数+请求具体 参数与每个请求
  3. 其余API需要他们,转身,ping的用户商店 (不管是什么),确认了身份验证
  4. 如果授权建立后,服务请求;否则,否认 与适当HTTP status code
  5. 重复上述每一请求的所有其余Api你 目录

方法-2:

  1. 客户开始一个认证请求
  2. 登录其余API将处理所有这样的请求
  3. 它需要在执行授权参数(API关键,uid/pwd或任何你 选择)和验证身份验证对用户储存(LDAP,广告,或数据库等)。
  4. 如果证实,创建一个验证标记和手回 客户/叫
  5. 叫然后发送这种授权令牌+请求的具体参数与 每随后要求其它商业余Api,直至注销或直到租约到期

显然,在方法-2,其余Api将需要一种方法来解和信任的标记作为有效。登录API执行授权的核查,因此,"代客泊车的钥匙"需要的信任,其它其余的Api在你的目录。

这当然意味着授权的关键/令将需要存储和共享之间的休息Api。这种共同的、可信的令牌库可以是地方/联合任,从而允许休息Api从其他组织相互信任。

但我跑题了。

这一点是,一个"国家"(关于客户身份验证的状况)需要维护和共享以使所有其他Api可以创建一个圆圈的信任。如果我们不这样做,其方式是-1,我们必须接受这一行为的认证必须执行所有要求。

执行认证是一种资源密集的过程。想象一下执行SQL查询,对于每一个进入的请求,对你的用户商店检查uid/pwd匹配。或者,进行加密和执行哈希匹配(AWS式)。和建筑,每一个其他API将需要执行这一点,我怀疑,用一个共同的回端登录服务。因为,如果不,那么你的垃圾的授权码无处不在。一个很大的混乱。

因此,更多的层,更多的延迟。

现在,采取的方式-1及适用于HTM。没有你的(人)用户真正关心如果你要送uid/pwd/哈希或任何与每一个请求?不,只要你不打扰她扔的认证/登录网页每一秒。祝你好运具有客户,如果你这样做。所以,什么你会做的就是储存的登录信息的地方在客户方面,在浏览器中,正确的开始,并发送每一请求。对于(人类)用户,她已记录,并在"会议"是可用的。但在现实中,她是认证对每一请求。

同样的方式-2.你的(人)用户将不另行通知。所以没有害处。

如果我们适用的方式-1至MTM?在这种情况下,由于其一个机,我们可以孔滚出这个家伙要求它提交认证的信息与每一请求。没有人在乎!执行方式-2MTM不会引起任何特殊反应;它是一个该死的机器。它可以不在乎!

所以,真正的问题是什么适合你的需要。无国籍状态有一定的价格支付。支付的价格和行动。如果你想要一个纯粹的,然后付出的代价也和行动。

在结束、哲学并不重要。真正重要的是发现信息,介绍,以及消耗的经验。如果人们爱你Api,你做你的工作。

这里是一个真正的和完全宁静的认证方案:

  1. 创建一个公共/私人钥匙对在认证服务器。
  2. 分发的公共钥匙给所有服务器。
  3. 当客户进行身份验证:

    3.1.问题的一个令,其包含以下内容:

    • 到期时间
    • 用户名(可选)
    • 用户IP(可选)
    • 哈密码(可选)

    3.2.加密令的私人钥匙。

    3.3.发送的密令牌还给用户。

  4. 当用户访问的任何API他们还必须通过在其授权令牌。

  5. 服务器验证标记的有效通过解密使用验证服务器的公用钥匙。

这是无国籍/Rest的认证。

请注意,如果一个密码哈希包括用户,也将发送的未加密的密码随着认证标记。服务器可以验证密码相匹配的密码被用来创建的身份认证牌,通过比较的散列。安全连接使用类似HTTPS将是必要的。Javascript在客户方可获得的用户密码和储存的客户的侧面,无论是在存储器或在一个饼干,可能的话加密服务器的 公共 关键。

要老实跟你说,我在这里看到伟大的答案,但一些困扰我有点是当有人将采取全无国籍的概念,它成为一个教条的极端。这让我想起那些老Smalltalk的球迷,只有想拥抱纯面向对象,如果自己是不是一个对象,那么你就错了。别逗了。

在RESTful方法应该使您的生活更轻松,减少开销和会议的成本,尽量遵循它,因为它是一个明智的做法,但分钟你按照一门学科(专业不限/准则)至极端它不再提供它的目的是为益,那么你就错了。一些最好的语言,今天兼得,函数式编程和面向对象。

如果你解决你的问题,最简单的方法是存储认证密钥的cookie和发送的HTTP标头,然后去做,只是不要滥用它。请记住,会议是坏时,他们变得沉重和大,如果所有会话包含的是包含一个关键的短字符串,那么有什么大不了的?

我愿意接受意见改正,但我就是不明白,使我们的生活苦不堪言简单地避免将散列的大辞典在我们的服务器上的点(到目前为止)。

首先,一个RESTful web服务是 STATELESS (或者换句话说,无会话)。因此,一个RESTful服务没有,应该不会有会话或参与饼干的概念。做在RESTful服务认证或授权的方法是通过使用如在RFC 2616 HTTP规范中定义的HTTP授权报头。每一个请求应包含HTTP授权报头,并且该请求应通过HTTPS(SSL)连接来发送。这是做身份验证和核实的HTTP RESTful Web服务请求授权的正确方法。我已经实现了在思科系统公司的思科Prime性能管理应用RESTful Web服务。和作为Web服务的一部分,我已经实现认证/授权,以及

鲁Gomes的。

这当然不是关于“会话密钥”,因为它通常被用来指无会话其内的所有REST的约束的执行认证。每个请求是自描述的,携带足够的信息授权而没有任何服务器端应用程序状态在其自身上的请求。

接近最简单的方法是通过与HTTP的内置认证机制在 RFC 2617 <起始/ A>

'的非常有洞察力'条提及的通过@skrebel( http://www.berenddeboer.net/rest/authentication.html ) 讨论了一种令人费解的,但真正打破的认证方法。

你可以尝试访问的页面(这是应该被视只有经过身份验证用户) http://www.berenddeboer.net/rest/site/authenticated.html 没有任何登录凭证。

(抱歉我不能评论的回答。)

我要说的是休息和认证只是不混合。其余的装置无国籍,但'认证'是一个国家。你不能让他们在同一层上。如果你是一个宁静的倡导者和皱眉后国家,那么你必须去HTTPS(即离开安全问题的另一层)。

我认为宁静认证涉及的认证令牌的通过作为请求的参数。例子是由API的使用apikeys的。我不相信使用cookie或HTTP认证认证了的。

更新月16-Feb-2019

该办法早先提到的以下基本上是"资源的所有者密码凭据"授予类型的 OAuth2.0.这是一个简单的方式得到建立和运行。然而,这个方法每一个申请在该组织会结束了自己的认证和授权机制。建议的方法是"授权代码"补助金的类型。此外,在我早些时候的回答下面我建议,浏览本地存储用以储存身份验证标记。然而,我相信,cookie是正确的选择用于这一目的。我有我的理由的详细、授权代码授予类型执行的方法,安全的考虑因素等。在 这个计算器的答案.


我认为下面的做法可以用于其他认证服务:

  1. 创建一个登录宁静API接受的用户名和密码认证。使用HTTP POST方法来防止和缓存SSL对安全的期间过境 在认证成功,API返回的两个JWTs-一个接入令牌(较短的有效性,说30分钟)和一个刷新标记(不再有效性,说24小时)
  2. 客户(一个基于网络的UI)存储JWTs在当地储存并在以后每API呼吁通过接入令牌"授权:承载#接入令牌"的头
  3. API检查的有效性令通过核实的签名和截止日期。如果标记是否有效,检查,如果用户(它解释"子"要求在智威汤逊作为用户名)访问API与缓查找。如果用户被授权接入的API,执行业务的逻辑
  4. 如果令已过期,API返回HTTP响应400码
  5. 客户,接收400/401,调用的另一个休息API与刷新标记在"授权:承载#刷新记"标题获得一个新的接入令牌。
  6. 在收到呼叫与刷新标记,检查,如果刷新标记有效期通过检查签署和到期日期。如果刷新标记是有效的,刷新访问权高速缓存的用户从数据库和返回新接入令牌和刷新标记。如果刷新标记是无效的,返回HTTP响应400码
  7. 如果一个新的接入令牌和刷新标记返回,转到第2步。如果HTTP response code400返回,客户承担的刷新标记已经过期,并询问为用户名和密码,从用户
  8. 对于注销,清除本地的储存

这种方法,我们正在做的昂贵的运作的装载的高速缓存与用户特定权限的详细信息,每次30分钟。因此,如果一个访问被撤销或新授予访问权限,它需要30分钟以反映或注销后一个登录。

这是做到这一点的方式: 2.0使用OAuth 2.0登录

您可以使用其他的认证方法等,然后谷歌的,只要它支持OAuth的。

要回答这个问题从我的理解...

认证系统使用的休息所以你不需要实际上轨道或管理用户在系统上。这是通过使用HTTP方法后,获得、投入、删除。我们把这4个方法,并认为它们在条款的数据库相互作用,作为创建、阅读、更新、删除(但是在网上我们使用员额和获取,因为这是什么锚标签的支持目前正).所以治疗后,并得到作为我们创建/READ/UPDATE/DELETE(。)然后我们可以设计的路线,在我们的网络应用程序,这将能够推断出什么样的作用。我们正在实现。

例如,在红宝石在轨道上应用程序,我们可以建立我们的网络应用程序,例如,如果一个用户登录访问 http://store.com/account/logout 然后在得到该网页可以视为用户的尝试以注销。在我们的轨道控制器,我们将建立一个行动日志用户,并将它们送回到主页。

一个得到登录网页将产生一种形式。一个职位上的登录网页将被看作是一个登录尝试和采取后数据,并使用它登录。

对我来说,这种做法的使用HTTP方法映射到他们的数据库含义,然后建立一个认证系统与该记住你不需要通过周围的任何届会的身份证或跟踪会议。

我仍然在学习-如果你发现什么我说错了请纠正我,如果你了解更多的后它回到这里。谢谢。

使用,其中一个键的注册涉及适当的结合确保了公共密钥绑定到单个其所在确保非否认的方式被分配一个公钥infrastruction

请参阅 http://en.wikipedia.org/wiki/Public_key_infrastructure 。如果你按照正确的PKI标准,谁不当使用偷来的钥匙可以识别并锁定该人或代理人。如果代理需要使用证书,装订变得相当紧张。一个聪明的快速转动小偷可以逸出,但是他们留下更多的碎屑。

提示有效的保护的任何网络应用程序

如果你想保护你的应用程序, 然后你绝对应该开始使用HTTPS而不是HTTP, 这可确保一个建立安全通道之间和用户,这将防止嗅发出的数据来回到用户和将有助于保持数据交换保密。

你可以使用JWTs(JSON网Tokens)安全宁静Api, 这有很多好处相比的服务面会议的好处主要有:

1-更多的可扩缩的,因为你的API服务器不会必须保持届会的每个用户(其中可能是一个很大的负担,当你有很多会议)

2-JWTs都包含在自己有权利要求的其定义的用户作用,例如,什么,他可以访问和签发日期和到期日期(在这之后智威汤逊不会是有效的)

3-更容易处理跨负载平衡&如果你有多API的服务器你不需要分享会议的数据也没有配置服务器的途径的会议相同的服务器中,无论何时请求与智威汤逊命中的任何服务,它可以被认证和授权

4-低压力数据库,以及你没必要不断地存储和检索会议和数据,为每个请求

5JWTs不能被篡改,如果使用强关键的签署智威汤逊,所以你可以信任的权利要求在智威汤逊,是发出请求,而无需检查用户届会议&他是否是经授权或没有,你可以检查智威汤逊然后你所有的设定知道是谁,什么,这个用户可以做的。

许多图书馆提供简便的方法来创建和验证JWTs在大多编程语言,例如:在node.js 一个最受欢迎的是 jsonwebtoken

由于其余的Api一般的目的是保持服务器的无国籍,因此JWTs更兼容的概念 因为每个请求发出授权令就是自给自足的 (智威汤逊) 没有的服务器具有以跟踪用户届会议相比会议,这使得服务的状态所以它会记住户和他的角色,然而,会议也广泛使用和拥有其优点,它可以搜索,如果你想要的。

需要注意的一个重要的事情是,你必须安全地提供智威汤逊的客户使用HTTPS和保存在一个安全的地方(例如在当地的存储)。

你可以了解更多关于JWTs 从这个链接

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