Javascript 添加要获取的头、解决cors、运行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

我正在进行一个项目,首先需要从服务器获取身份验证令牌

为此,我需要向授权服务器发送一个GET请求,其中头中包含两个键值对:1/客户端id(const)和2/基于客户端id时间戳的HMAC SHA1计算值,依此类推

这对邮递员来说很好。(我在在线计算器上计算sha1)

问题1:(cryptojs客户端) 作为一个节点应用程序,我包括cryptojs库和计算工作。但即使使用RequireJS,我也无法让cryptojs在浏览器中运行

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。