我正在一个项目中,我首先需要从服务器获取身份验证令牌。
为此,我需要向标头中包含两个键值对的GET请求发送授权服务器:1 /客户端ID(const)和2 /基于客户端ID时间戳的HMAC SHA1计算值,依此类推。
与Postman一起正常工作。 (我在在线计算器上计算sha1)
问题1:(cryptojs客户端)
作为一个节点应用程序,我包括cryptojs库,计算工作正常。但是即使使用RequireJS,我也无法让cryptojs在浏览器中运行。
Error: Module name "crypto-js" has not been loaded yet for context: _. Use require([])
问题2 :(心跳)
由于服务器不接受所有传入的连接,因此chrome显然拒绝了该连接。
在获取请求中添加模式:“ no-cors”不能解决问题。
问题3 :(标题)
我需要在获取请求标头中添加两个键-值对。在邮递员中,这没问题,但是我不确定这是否可以与添加或仅将它们添加到标题中一起使用:{}
我不断收到服务器错误,好像没有添加任何标题。
我已经尝试过针对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
不允许从页面的原始位置进行访问。请记住,在浏览器中,Same Origin Policy默认情况下会阻止一个来源的脚本从其他来源请求信息。 (postman
不是浏览器,不受此限制)。这样一来,站点A(恶意行为者)上的脚本就无法通过向站点B发出请求(来自浏览器,并带有身份验证信息)来从站点B(也许是您的网上银行)窃取您的个人信息。
为此,https://authorization.server.com
上的服务器代码将需要使用Cross-Origin Resource Sharing响应浏览器的请求,以允许从您的来源进行访问。您不能从客户端代码执行此操作(出于明显的原因)。
或者,您可以在原始服务器上运行服务器,向该服务器发出请求,然后它可以向https://authorization.server.com
发送请求,并将响应传递回给您。您的服务器(不是浏览器)不受SOP约束。
关于javascript - 添加 header 以获取,解决cors,运行cryptojs客户端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56414744/