Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security RESTful身份验证作为一种状态形式_Security_Authentication_Rest - Fatal编程技术网

Security RESTful身份验证作为一种状态形式

Security RESTful身份验证作为一种状态形式,security,authentication,rest,Security,Authentication,Rest,在没有状态的情况下进行身份验证是不可能的。因此,在设计带有身份验证的RESTful软件时,我们是否为了安全而破坏了这种体系结构?这能走多远?为了构建一个更安全的系统,您可以存储任意数量的状态,只要它是安全的吗 拥有多个核心设计概念。最重要的一点是REST必须是无状态的,或者引用Wikipeida的话: “…处于rest状态的客户端能够 与用户交互,但不创建 加载和不消耗每个客户端 服务器上的存储或 网络。” 但是,根据定义,用户名和密码是客户端特有的状态,可能会发生更改。此外,客户机可以具有正在

在没有状态的情况下进行身份验证是不可能的。因此,在设计带有身份验证的RESTful软件时,我们是否为了安全而破坏了这种体系结构?这能走多远?为了构建一个更安全的系统,您可以存储任意数量的状态,只要它是安全的吗

拥有多个核心设计概念。最重要的一点是REST必须是无状态的,或者引用Wikipeida的话:

“…处于rest状态的客户端能够 与用户交互,但不创建 加载和不消耗每个客户端 服务器上的存储或 网络。”


但是,根据定义,用户名和密码是客户端特有的状态,可能会发生更改。此外,客户机可以具有正在验证的状态,否则他们将具有受限或无访问权限。

简而言之:REST的无状态状态表示该状态取决于客户机;)

简单地说,无状态意味着客户机提交的每个请求都应该包含服务器处理请求的所有信息。因此,不需要服务器上的先前状态


会话状态保留在客户端上。REST中用于身份验证的“黑客”是,会话相关信息(状态)可以被捕获为资源,可以映射回客户端会话。例如,启动时间、证书、会话ID以及相关信息等。

SSL证书不算作状态,它们可以用于身份验证和传输安全

它们对于典型的面向用户的web站点并不实用,但它们广泛用于web服务,包括REST服务,其中“用户”是可以加载X509证书并在每个请求中将其作为凭据的一部分的代码


例如,在使用WCF的C#中,RESTful系统有两种状态。客户端应用程序状态和资源状态。关于资源状态,重要的是它应该有一个标识符,比如URL

无论是谁访问资源状态,通过URL访问资源状态都应返回相同的信息(假设有足够的授权)

服务器会话状态会把事情弄得一团糟,因为人们使用它时会根据请求资源的人而改变响应的内容。这使得书签更加棘手,共享URL更加困难,缓存更加困难

不幸的是,维基百科的引文过于宽泛,容易被误解。对我来说,最简单的思考方式是服务器不应该知道客户机的当前状态


对客户端进行身份验证并不要求您在对客户端进行身份验证后保留有关客户端的信息。只需在下一个请求中再次进行身份验证

老问题,但我认为REST实际上要求服务器必须是无状态的,因为服务器上没有存储关于会话的数据

从客户端到服务器的每个请求必须包含理解请求所需的所有信息,并且不能利用服务器上存储的任何上下文

事实上,有一种方法可以做到这一点。具有返回令牌的身份验证端点。但是,与其在该令牌中存储随机标识符,不如存储已标识实体的主键,然后是密钥的加密散列,再加上客户端不知道的密钥


服务器现在可以在每次请求时高效、安全地对您进行身份验证。服务器端没有会话状态-请求包含所需的所有信息。

身份验证不是由状态处理的,请重新阅读RFCSA“但是,根据定义,用户名和密码是客户端独有的状态”这是毫无意义的。所考虑的状态处于应用程序级别。http是无状态的,但它可以进行身份验证。@Giraffe船长如果服务器没有存储每个用户的用户名和密码,您如何使用用户名和密码登录。这违反了
“不使用服务器上的每客户端存储”
。此外,RESTful架构没有RFC,它不是协议。如果服务器不知道如何验证凭据,这是一个没有意义的问题。http是RESTful应用程序的公平实现。这将是一个很大的禁忌。“会话状态可以在服务器上保存的资源中捕获。”不确定如何,在考虑无状态时,我认为这句话很能说明问题。请指出客户机或服务器是无状态的。无状态的是请求,而不是服务器或客户端。。见第5.1.3节。会话状态在客户端上。没有任何东西禁止引用/使用资源。好的,我知道这句话可能会被误解。。我将更新它。我仍然认为这是一种状态。它不比HTTPD创建的套接字和其他资源服务于请求。这个身份证书与每个用户的状态一样,是用户名和密码。我不认为禁欲主义是休息的目的。这就像抱怨一辆不需要燃料的汽车在制造过程中仍然消耗能源。证书身份验证可以由HTTPD独立于您的服务来处理。用户名和密码也可以在此层处理。我的论点的关键是身份验证需要状态。那么,只要唯一的状态是出于安全目的,并且我可以存储和操作任意多的状态,只要目的只是为了增强安全性,那么它仍然是RESTful的。用于构造此令牌的秘密可以脱机强制执行,听起来像hmac。您可以尝试脱机强制执行它,但只要加密技术是可靠的,你就不会有任何进展。