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

为此,我需要向标头中包含两个键值对的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/

10-10 23:34
查看更多