【发布时间】:2020-10-28 01:32:58
【问题描述】:
我最近问了一个问题:链接 here,关于在我的 autodesk-forge Web 应用程序中存储刷新令牌的最佳方式。我目前将刷新令牌存储在一个只有一行和一列的 SQL 数据库中,其中包含刷新令牌。关于token的步骤如下:
- 当用户登录时,会调用 GET 方法从数据库中检索最新的令牌。 Returndata.php 只是连接到 SQL DB 并从表中检索行。获取方法代码:
function getRefreshToken() {
$.get("returndata.php",
function(response) {
var res = JSON.parse(response);
console.log(response);
console.log(res);
refreshToken = res[0].Value;
// console.log(refreshToken);
useRefresh();
// console.log(response.value);
//var times = response.times;
},
);
}
- 返回令牌并用于获取用户的访问令牌。
- 获取访问令牌时,会附带一个刷新令牌,随后将其保存在 SQL 数据库中与之前的刷新令牌相同的行中。 Savesettings.php 只是连接到数据库并使用新的刷新令牌更新单行。 POST 方法存储刷新令牌的代码:
function saveRefreshToken() {
$.post("savesettings.php",
{
Value: refreshToken,
},
function(data, status){
console.log(data);
});
}
在大多数情况下,此方法运行良好,但也有几次出现问题。我相信这是由于并发问题。如果两个用户在非常相似的时间访问数据库,则数据可能会损坏或提供错误的数据。为了解决这个问题,我知道我需要使用信号量,以便其他请求等到第一个请求完成后再执行。如何使用信号量来实现这一目标?任何帮助将不胜感激,因为我非常坚持这个问题。谢谢。干杯!!
编辑
function getToken(){
$.ajax({
method: 'POST',
url: 'https://developer.api.autodesk.com/authentication/v1/gettoken',
headers: {
'Content-Type':'application/x-www-form-urlencoded'
},
data:'client_id=xxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxx&grant_type=authorization_code&code=' + code + '&redirect_uri=xxxxxxxxxxxxxxxxxxxxxx',
success:function(response){
// console.log(response);
access_token = response.access_token;
console.log(access_token);
console.log(response);
refreshToken = response.refresh_token;
saveRefreshToken()
}
})
}
function useRefresh(){
$.ajax({
method:'POST',
url: 'https://developer.api.autodesk.com/authentication/v1/refreshtoken',
headers: {
'Content-Type':'application/x-www-form-urlencoded'
},
data:'client_id=xxxxxxxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxx&grant_type=refresh_token&refresh_token='+refreshToken+'&scope=data:read',
success:function(response){
console.log(response);
refreshToken = response.refresh_token;
//console.log(refreshToken);
access_token = response.access_token;
saveRefreshToken();
}
})
}
【问题讨论】:
-
看到上面的代码意味着你在浏览器中暴露了你的令牌,对吧?这是一个安全漏洞,你不应该这样做。风险在于有人窃取了您的令牌,如果原始范围太高,您正在损害您的数据。您可能需要重构您的应用程序以保护令牌。我很乐意在这方面为您提供帮助。
-
再次感谢您的帮助。我目前正在这样做,但是当用户使用刷新令牌获取令牌时,它的唯一范围是数据:读取。但是,当我授权时,我也有一个 data:write。如果用户可以获得 data:write 令牌,那将是安全漏洞。那么,我应该如何处理令牌而不是@cyrille
-
只是添加 @cyrille ,我无法下载 NPM 包,所以我无法使用 express.js 之类的东西
-
我正在从 LAN 运行我的网络应用程序,当我尝试安装 NPM 包时,我收到以下消息: \\team\wwwroot' CMD.EXE 以上述路径作为当前路径启动目录。不支持 UNC 路径。默认为 Windows 目录。 @cyrille 我现在已经在我的帖子中包含了我的令牌函数
-
您可以通过 cyrille @ autodesk 与我联系。 com
标签: php sql semaphore autodesk-forge