您当前位置:资讯中心 >服务器 >浏览文章

浏览器中存储访问令牌的最佳实践

来源:互联网 日期:2023/12/5 7:51:54 阅读量:(0)

浏览器提供了各种持久化数据的解决方案。当存储令牌时,您应该权衡存储选择与安全风险。

图片

译自Best Practices for Storing Access Tokens in the Browser。

web应用程序不是静态站点,而是静态内容和动态内容的精心组合。更常见的是,web应用程序逻辑在浏览器中运行。与从服务器获取所有内容不同,应用程序在浏览器中运行JavaScript,从后端API获取数据,并相应地更新web应用程序呈现。

为了保护数据访问,组织应该采用OAuth 2.0。通过OAuth 2.0,JavaScript应用程序需要在对API的每个请求中添加访问令牌。出于可用性原因,JavaScript应用程序通常不会按需请求访问令牌,而是存储它。问题是,如何在JavaScript中获取这样的访问令牌?当您获取一个令牌时,应用程序应该在哪里存储令牌,以便在需要时将其添加到请求中?

本文讨论了浏览器中可用的各种存储解决方案,并突出了与每种选择相关的安全风险。在审查威胁之后,它描述了一种解决方案,以提供最佳的浏览器安全选项,用于必须与OAuth保护的API集成的JavaScript应用程序。

获取访问令牌

在应用程序可以存储访问令牌之前,它需要先获取一个令牌。当前的最佳实践建议通过“授权码流”这一方式来获取访问令牌: 授权码流是一个两步流程,首先从用户那里收集一个授权许可——授权码,然后应用程序在后台通道中用授权码交换访问令牌。这个请求称为令牌请求,例子如下:

const accessToken = await fetch(OAuthServerTokenEndpoint, {
method: "POST",
// token request with authorization code and PKCE
// submits data in as x-www-form-urlencoded encoded format
body: new URLSearchParams({
 client_id: "example-client",
grant_type: "authorization_code",
code: authorization_code,
 code_verifier: pkce_code_verifier
})
})
// server responds with JSON object
.then (response => response.json())
.then (tokenResponse => {
  // parse access token from response
  if (tokenResponse.accessToken) {
    return tokenResponse.accessToken;
  } // else handle error response
})
.catch( 
// handle network error
)
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。