当前位置:  开发笔记 > 编程语言 > 正文

我应该为我的API使用哪种身份验证策略?

如何解决《我应该为我的API使用哪种身份验证策略?》经验,为你挑选了1个好方法。

我有一个客户端angular-js应用程序.我有一个服务器端nodejs API.客户端和服务器端应用程序位于不同的域上.客户端使用API​​来获取或发布一些数据.客户端也需要从服务器端获取图像并在浏览器中显示它们.

我使用passport nodejs模块进行身份验证.我不知道哪种认证策略对我更好.我认为有两种类型的身份验证策略:基于令牌和基于cookie.我认为在我的情况下这两种类型都没用:

    如果我使用基于令牌的策略,那么我应该在API的每个请求中发送带有令牌的Authentication头.我可以在AJAX请求中发送标头,但如果我想显示位于服务器端的图像,我就有问题了.因为浏览器不会在标签中发送标头.

    如果我使用cookies,那么我没有图像问题.但是我遇到了AJAX请求的问题.因为会话cookie存储在服务器端应用程序的域中.如果我从客户端域发送AJAX请求,那么我应该发送每个请求的cookie.我使用XmlHttpRequest进行AJAX,我应该使用withCredentials选项发送cookie.但在跨域请求中,浏览器将在每个AJAX请求之前发送预检(OPTION)请求.浏览器不会发送带有OPTION请求的cookie.这对我来说是一个问题,因为如果没有授权,服务器端API无法对OPTION请求做出正确的响应.

采用的解决方案是什么?



1> MvdD..:

了解Web应用程序和Web服务之间的区别非常重要.Web应用程序提供标记,JavaScript,CSS和图像文件,并且通常使用基于cookie的身份验证(但可以使用任何其他隐式身份验证机制).浏览器发出的任何请求都会自动进行身份验证

另一方面,Web服务通常使用承载令牌认证.当浏览器,胖客户端或移动设备上的客户端与API通信时,它会Authorization在HTTP请求的标头中发送令牌.标头必须显式附加到JavaScript中的请求或执行HTTP请求的本机代码中.

在单页应用程序(SPA)中,Web应用程序丢失,标记,JavaScript,CSS和图像从浏览器提供,无需身份验证.通常使用JWT令牌仅对对Web服务的请求进行身份验证.

在您的情况下,如果您只希望授权用户能够下载图像和其他文件,则应考虑构建Web应用程序.使用类似安全协议或OpenID Connect对用户进行身份验证.选择一个授权服务器,该服务器既支持Web应用程序的OpenID Connect,也支持Web服务的OAuth2.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有