繁体   English   中英

如何为“浏览器”和“非浏览器”客户端同时认证Web服务?

[英]How to authenticate a web service for both “browser” and “non-browser” clients?

我的Web服务同时需要browsernon-browser客户端。 而且我使用基于令牌的身份验证来使服务变为stateless

我将令牌存储为cookie,因为我希望当从网页启动一些Ajax调用时automatically by the browser发送令牌。

但是对于非浏览器客户端,如何处理cookie? 我是否仅将Cookie作为纯HTTP标头管理?

在非浏览器客户端上执行此操作的理想方法是使用类似OAuth2协议的协议。 该协议旨在安全地为浏览器和非浏览器客户端处理类似的事情。

运作方式如下:

  • 您的服务公开了一个OAuth2终结点,通常是/oauth/token
  • 您的客户端向/oauth/token发送一个表单编码的POST请求,指定客户端正在使用的OAuth2的“类型”。 对于非浏览器客户端,您很可能会在POST请求的正文中提供grant_type=password
  • 您还包括您的用户名/密码以进行身份​​验证。

然后,您的客户端将获得BACK,这是应该安全存储在您的客户端上的访问令牌/刷新令牌。

如果您的客户端是像iOS这样的移动设备,则将访问/刷新令牌存储在iOS钥匙串中;如果您使用的是Android,则将这些令牌存储在“共享首选项”中。 无论哪种方式-这些都是“安全的”存储位置,用于保存诸如令牌之类的机密信息。

然后,当您需要使用这些令牌对您的服务进行身份验证时,您只需使用该令牌和bam POST到您的API,即可对您进行身份验证。

这是在大多数情况下处理令牌的理想方法。 我是Node中一个名为express-stormpath的身份验证库的作者,这也是我的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM