Javascript 添加要获取的头、解决cors、运行cryptojs客户端
我正在进行一个项目,首先需要从服务器获取身份验证令牌 为此,我需要向授权服务器发送一个GET请求,其中头中包含两个键值对:1/客户端id(const)和2/基于客户端id时间戳的HMAC SHA1计算值,依此类推 这对邮递员来说很好。(我在在线计算器上计算sha1) 问题1:(cryptojs客户端) 作为一个节点应用程序,我包括cryptojs库和计算工作。但即使使用RequireJS,我也无法让cryptojs在浏览器中运行Javascript 添加要获取的头、解决cors、运行cryptojs客户端,javascript,fetch,node-modules,cryptojs,Javascript,Fetch,Node Modules,Cryptojs,我正在进行一个项目,首先需要从服务器获取身份验证令牌 为此,我需要向授权服务器发送一个GET请求,其中头中包含两个键值对:1/客户端id(const)和2/基于客户端id时间戳的HMAC SHA1计算值,依此类推 这对邮递员来说很好。(我在在线计算器上计算sha1) 问题1:(cryptojs客户端) 作为一个节点应用程序,我包括cryptojs库和计算工作。但即使使用RequireJS,我也无法让cryptojs在浏览器中运行 Error: Module name "crypto-js" ha
Error: Module name "crypto-js" has not been loaded yet for context: _. Use require([])
问题2:(cors)
显然,chrome拒绝连接,因为服务器不接受所有传入的连接。
向提取请求添加模式:“无cors”并不能解决此问题
问题3:(标题)
我需要向get请求头添加两个键值对。在postman中,这没有问题,但我不确定这是否适用于append或只是将它们添加到我的头中:{}
我经常收到一个服务器错误,好像没有添加头一样
我已经为cryptojs问题尝试了REquireJS
我已将标题添加到myHeaders对象
const myHeaders = new Headers();
myHeaders.append('ClientID', CLIENTID);
myHeaders.append('Clientsecret', hashedToken);
并将这些值添加到:
headers: {
...
'ClientID': CLIENTID,
'Clientsecret': hashedToken,
}
两者似乎都没有帮助
我的代码:
function getToken(){
hashedToken = getHashedSecret(); //this won't work client side as cryptojs can not be loaded
const CLIENTID = "CLIENTID";
const AUTHURL = "https://authorization.server.com/api/CLIENTID/authorization/";
var TIMESTAMP = getTimeStamp();
const myHeaders = new Headers();
// myHeaders.append('Content-Type', 'application/json');
myHeaders.append('ClientID', CLIENTID);
myHeaders.append('Clientsecret', hashedToken);
console.log(myHeaders);
let response = fetch(AUTHURL+TIMESTAMP, {
method: 'GET',
headers: {
myHeaders,
'Accept': 'application/json',
'Content-Type': 'application/json',
'Origin': '',
'Host': 'authorization.server.com',
include: 'ClientID', CLIENTID
},
mode: 'no-cors',
})
.then(response => response.json())
.then(data => {
console.log(data);
document.getElementById('output').innerHTML = data;
})
.catch(error => console.error(error))
console.log('data');
return data;
}
我应该从服务器上得到一个令牌听起来像是
https://authorization.server.com
不允许从您的页面来源进行访问。请记住,在浏览器中,默认情况下,阻止来自一个来源的脚本从其他来源请求信息。(postman
,不是浏览器,不受此限制)。这样,站点A(恶意参与者)上的脚本就不能通过向站点B发出请求(从浏览器,从而使用您的身份验证信息)从站点B(可能是您的网上银行)窃取您的个人信息
要使其正常工作,服务器在https://authorization.server.com
将需要使用响应浏览器的请求,以允许从您的源站进行访问。您无法从客户端代码执行此操作(原因很明显)
或者,您可以在您的源服务器上运行服务器,向该服务器发出请求,并且它可以向
https://authorization.server.com
并将回复传回给您。您的服务器(不是浏览器)不受SOP的约束。我找到的唯一有效解决方案是使用API端点设置自己的节点后端,这样可以毫无问题地返回结果,然后只使用自己的中间API。