当前位置: 首页 > 知识库问答 >
问题:

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

东方方伟
2023-03-14

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

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

> < li>

如果我使用基于令牌的策略,那么我应该在发送给API的每个请求中发送带有令牌的认证头。我可以在AJAX请求中发送标题,但是如果我想显示位于服务器端的图像,我会遇到一个问题。因为浏览器不会发送< code >中的标头

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

采用的解决方案是什么?

共有1个答案

卫松
2023-03-14

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

另一方面,Web 服务通常使用持有者令牌身份验证。当浏览器、胖客户端或移动设备上的客户端与 API 通信时,它会在 HTTP 请求的授权标头中发送令牌。标头必须显式附加到执行 HTTP 请求的 JavaScript 或本机代码中的请求。

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

在您的情况下,如果您希望只有授权用户才能下载图像和其他文件,则应考虑构建 Web 应用程序。使用安全协议(如 OpenID Connect)对用户进行身份验证。选择同时支持 Web 应用程序的 OpenID Connect 和 Web 服务的 OAuth2 的授权服务器。

 类似资料:
  • 问题内容: 我正在尝试决定要选择哪种mime类型来返回mp3数据(由php提供) 根据此mime类型列表:http : //www.webmaster-toolkit.com/mime-types.shtml 这些之间有什么区别,我应该使用哪个? 问题答案: 最好的选择是使用RFC定义的 mime-type 。

  • 存在两个java api引用: > http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html http://docs.oracle.com/javase/7/docs/technotes/guides/security/certpath/CertPathProgGuide.html 在

  • 我在域< code > client-domain . example 上有一个客户端应用程序,在域< code > server-domain . example 上有一个服务器端应用程序。服务器端有一个API。客户端应用程序向服务器端应用程序发送AJAX请求。我使用基于令牌的认证,所以客户端应用程序在每个AJAX请求的头中发送令牌,例如:“Authorization:Bearer { some

  • 在azure active directory文档中,它指出: 我使用passport和passport-azure-ad以及来验证作为中间件的accessToken。如果传递带有授权承载标头的,则会收到一个错误。如果我传递,则如果我在承载策略配置中设置了,则会收到。 首先,我想知道哪一个令牌是要使用的?两者都是有效的jwt令牌(https://jwt.ms/),但它们包含不同的字段。我想现在id

  • 我有一个需要以两种不同方式保护的API: 1) 对除1以外的所有请求URL使用JWT,该URL需要使用基本身份验证进行保护 2) 一个url的基本身份验证。 我已经为JWT和Basic Auth设置了安全配置。我的问题是,当我使用有效的用户名和密码请求基本的经过身份验证的URL时,它会成功地对我进行身份验证,并将数据存储在cassandra中。 然后,我希望必须通过/api/login为所有其他请

  • 使用spring security,您可以拥有每个人都可以访问的公共apiendpoint,以及在获得响应之前需要进行身份验证的endpoint。在我的应用程序中,用户通过jwt令牌进行身份验证。对于目前登录的用户,始终检查令牌,无论公共apiendpoint是否获得请求。 我想知道如何检查当前endpoint是公共endpoint还是经过身份验证的endpoint,这样我可以修改代码,使令牌检查