Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
针对非浏览器使用者的Restful身份验证_Rest_Cookies_Restful Authentication_Stateless - Fatal编程技术网

针对非浏览器使用者的Restful身份验证

针对非浏览器使用者的Restful身份验证,rest,cookies,restful-authentication,stateless,Rest,Cookies,Restful Authentication,Stateless,我有一个作为ASP MVC应用程序编写的web服务,它基本上使用滚动cookies作为其身份验证机制。因此,有人通过https将用户名和密码发送到该服务,然后该服务对其进行验证,并向其发出一个cookie,其中包含令牌、用户标识符和时间戳,作为HTTPONLY和SECURE。然后,每当用户需要访问需要身份验证的页面时,发送cookie,并使用时间戳和令牌对用户进行验证,假设传递了cookie,则发出新的时间戳并将其发送回用户 这种方法迄今为止仍然有效,尽管仍有可能出现CSRF(通过滚动时间戳减少

我有一个作为ASP MVC应用程序编写的web服务,它基本上使用滚动cookies作为其身份验证机制。因此,有人通过https将用户名和密码发送到该服务,然后该服务对其进行验证,并向其发出一个cookie,其中包含令牌、用户标识符和时间戳,作为HTTPONLY和SECURE。然后,每当用户需要访问需要身份验证的页面时,发送cookie,并使用时间戳和令牌对用户进行验证,假设传递了cookie,则发出新的时间戳并将其发送回用户

这种方法迄今为止仍然有效,尽管仍有可能出现CSRF(通过滚动时间戳减少)和一些其他漏洞,但这是当前项目团队愿意承受的风险,有一个巨大的技术债务卡需要寻找更好的方法,但这是另一个讨论,因为我们的主要目标是一个无状态服务,所以它可以很容易地扩展

不管怎么说,所有这些都是片面的,现在的问题是我们被要求从服务中向其他第三方公开数据。然而,他们不会像使用浏览器的普通用户那样使用这些数据,而是作为任何平台上的某种应用程序。因此,现在我想知道是否有更好的方法让基于应用程序的消费者自己进行身份验证,因为目前他们需要发送http请求进行身份验证,然后获取返回的cookie,并将其发送给受限制的请求。然而,其他第三方则需要在他们想要从我们的系统中获取数据的时候继续处理这个cookie,这对他们来说似乎有点痛苦


那么,有没有其他我看不到的方法来实现这一点?正如我所看到的使其保持无状态的两种方法一样,每次都在querystring上发送一些令牌,这同样需要他们对其进行身份验证和存储,并且会使querystring变得不那么干净。另一种方法是,我们目前使用cookies作为状态机制。

如果您真正关心保持API RESTful,那么在查询字符串上发送凭据肯定是不允许的,因为在REST中,整个URI是资源的不透明标识符,使用cookie是服务和HTTP之间不必要的耦合。正确的身份验证方式是协议允许和标准化的任何方式,因此,在您的情况下,通过WWW身份验证和授权头。客户机应该在每个请求上发送一个Authorization:Basic头中的用户名和密码(当然,始终使用SSL)

如果您真的想在客户机通过username:password身份验证后使用令牌,您还可以在相同的头中将其作为自定义授权方案接受。例如,类似于:

Authorization: MyCompany apitoken="12k9023nd02890382n8902"

当你对什么是RESTful方式有疑问时,想想你使用的协议的标准是什么。这是REST背后的限制之一。无论何时,当您必须记录一些正在取代标准化功能的内容时,您都是在做错事。如果标准不足以满足您的需要,那么可以添加一些东西,比如在这里使用令牌的自定义身份验证方案。

如果您真正关心保持API RESTful,那么在querystring上发送凭据肯定是不允许的,因为在REST中,整个URI是资源的不透明标识符,使用cookie是服务和HTTP之间不必要的耦合。正确的身份验证方式是协议允许和标准化的任何方式,因此,在您的情况下,通过WWW身份验证和授权头。客户机应该在每个请求上发送一个Authorization:Basic头中的用户名和密码(当然,始终使用SSL)

如果您真的想在客户机通过username:password身份验证后使用令牌,您还可以在相同的头中将其作为自定义授权方案接受。例如,类似于:

Authorization: MyCompany apitoken="12k9023nd02890382n8902"

当你对什么是RESTful方式有疑问时,想想你使用的协议的标准是什么。这是REST背后的限制之一。无论何时,当您必须记录一些正在取代标准化功能的内容时,您都是在做错事。如果标准不足以满足您的需要,那么可以添加一些东西,比如在这里使用令牌的自定义身份验证方案。

如果您真正关心保持API RESTful,那么在querystring上发送凭据肯定是不允许的,因为在REST中,整个URI是资源的不透明标识符,使用cookie是服务和HTTP之间不必要的耦合。正确的身份验证方式是协议允许和标准化的任何方式,因此,在您的情况下,通过WWW身份验证和授权头。客户机应该在每个请求上发送一个Authorization:Basic头中的用户名和密码(当然,始终使用SSL)

如果您真的想在客户机通过username:password身份验证后使用令牌,您还可以在相同的头中将其作为自定义授权方案接受。例如,类似于:

Authorization: MyCompany apitoken="12k9023nd02890382n8902"

当你对什么是RESTful方式有疑问时,想想你使用的协议的标准是什么。这是REST背后的限制之一。无论何时,当您必须记录一些正在取代标准化功能的内容时,您都是在做错事。如果标准不足以满足您的需要,那么可以添加一些东西,比如在这里使用令牌的自定义身份验证方案。

如果您真正关心保持API RESTful,那么在querystring上发送凭据肯定是不允许的,因为在REST中,整个URI是资源的不透明标识符,使用cookie是服务和HTTP之间不必要的耦合。正确的身份验证方法是协议允许和标准化的任何东西,因此,在