【问题标题】:Angular - authentication headersAngular - 身份验证标头
【发布时间】:2019-06-19 05:14:47
【问题描述】:

我有一个 java 后端,它为我提供了一些受身份验证保护的 API。

因此,如果我使用任何具有授权的浏览器或邮递员调用它,我会得到200 (Ok) 响应,但如果我使用相同的用户和密码设置httpHeaders,我会得到401 (Unauthorized)

来电:

let username: string = 'admin';
let password: string = 'pe';
let headers =  new HttpHeaders().set('Authorization' , 'Basic ' + btoa(username + ':' + password)).set('Content-Type', 'application/json').set('cache-control', 'no-cache'); 
console.log(headers);

let params = new HttpParams().set('instID', value).set('procType', 'M');

return this.httpClient.get<pe_process_instance[]>('http://' + this.urlConfig.BASE_URL + ':' + this.urlConfig.PORT + '/' + this.urlConfig.WSBaseURL + '/getipeprocessinstances', { headers: headers , params: params });

回应:

我在这里缺少什么?我是否正确设置了标题?

【问题讨论】:

  • 我认为最好的做法是使用interceptor
  • @Abhishek 看不出答案对我有什么帮助:/
  • 好吧,这似乎在选项请求上失败了,在我看来这是一个 CORS 问题。您是否在后端正确设置了 CORS?

标签: angular api http authentication header


【解决方案1】:

尝试以这种方式设置您的headers

let headers = new HttpHeaders();

headers = headers.append('Authorization', 'Basic ' + btoa(username + ':' + password));
headers = headers.append('Content-Type', 'application/json');
headers = headers.append('cache-control', 'no-cache');

当您多次使用.set() 时,您每次都会覆盖您的标头,并且只发送最后一个标头。

【讨论】:

  • 我想我有另一个想法,为什么您对此请求有问题。看,401 你得到的是Option 请求,而不是GET,这是你的browser 版本和REST client 请求之间的区别,你没有CORS 问题。我认为您的问题不是 Angular App,而是 Java 服务器。通常,您应该从OPTION 获得200,最终从GET 获得401。我认为您应该从身份验证过程中禁用OPTION 请求。
  • 你的意思是在后端禁用OPTION?
  • 不禁用OPTION,但禁用OPTION请求的身份验证。几年前我在PHP Symfony 框架中遇到过类似的问题,我找到了OPTION 请求获得轮次身份验证过程的解决方案。这非常重要,因为 OPTION 请求没有自定义标头,因此无法通过它们的身份验证。
  • 您找到解决方案了吗?
猜你喜欢
  • 2021-09-26
  • 2015-03-07
  • 2015-09-09
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 2014-05-20
  • 2014-10-19
相关资源
最近更新 更多