针对REST API的授权会引发错误:401(找不到凭据的凭据。)

时间:2017-05-09 09:35:53

标签: rest api cors fetch-api alm

我想对HP Alm Rest API进行授权,我认为这“应该”有效,但它没有:

function performSignIn(){

let headers = new Headers();

headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
headers.append('Authorization', 'Basic ' + base64.encode(username + ":" + password));

fetch(sign_in, {mode: 'no-cors', method:'POST', headers: headers})
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(error => console.log('Authorization failed : ' + error.message));
}

我收到一些奇怪的错误消息:

401(没有凭据找到请求。)

这是HP文档中的一个示例,使用XMLHttpRequest完成: http://alm-help.saas.hpe.com/de/12.53/api_refs/REST/webframe.htm#signin-out_example.htm

有什么想法吗?我没有看到什么是错的。

非常感谢!

祝你好运, 丹尼尔

2 个答案:

答案 0 :(得分:2)

默认情况下,

fetch(…)不会发送凭据。您需要explicitly specify they should be sent

fetch(sign_in, {credentials: 'include' , method:'POST', headers: headers})
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(error => console.log('Authorization failed : ' + error.message));
}

另外,顺便说一下,你绝对不想指定mode: 'no-cors'。其效果是告诉浏览器,阻止我的前端JavaScript访问此请求的响应。

答案 1 :(得分:-1)

谢谢,这似乎有效!但关于'no-cors',我收到此错误消息:

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://127.0.0.1:3000”访问。响应具有HTTP状态代码501.如果不透明响应满足您的需要,请将请求的模式设置为“no-cors”以获取禁用CORS的资源。

我认为'没有人'会有所帮助,但实际上却没有。