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

Posted

技术标签:

【中文标题】针对 REST API 的授权引发错误:401(未找到请求的凭据。)【英文标题】:Authorization against REST API throws an error: 401 (No credentials found the request.) 【发布时间】:2017-10-07 13:18:44 【问题描述】:

我想针对 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

有什么想法吗?我看不出有什么问题。

非常感谢!

最好的问候, 丹尼尔

【问题讨论】:

【参考方案1】:

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 访问此请求的响应。

【讨论】:

【参考方案2】:

谢谢你,这似乎有效!但关于“no-cors”,我收到以下错误消息:

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

我认为“no-cors”会有所帮助,但实际上并没有。

【讨论】:

干杯——您应该为此打开另一个问题,而不是发布答案。但是现在让您知道:501 表示服务器端出现故障,对吗?因此,首先要查看您的服务器端日志,以找出服务器端出现故障的原因以及原因。但无论如何,对于错误响应,许多或大多数 Web 服务器不会发送 Access-Control-Allow-Origin 标头,而是只会发送成功响应。因此,501 响应中缺少 Access-Control-Allow-Origin 响应标头并不表示服务器 CORS 配置错误。真正的问题是 501 本身。

以上是关于针对 REST API 的授权引发错误:401(未找到请求的凭据。)的主要内容,如果未能解决你的问题,请参考以下文章

Cosmos db Rest API - 错误 401 未经授权

Phonegap错误:401未经授权 - 在Phonegap中使用基本身份验证的Rest API

Spotify API 错误 401 - 尝试将曲目放入用户的库中

我在 c# wpf 中使用 spotify api 收到错误 401 未授权

Ejabberd OAuth / REST 401 未经授权

调用.Net API时如何解决邮递员中的401未授权错误