针对 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 未授权