我希望能够使用我的Angular 5应用程序请求远程API。
API服务器正在询问SSL证书以验证客户端。
该证书由提供API的公司 - 分发给有限数量的用户,直接交给包含证书的USB密钥(由可信CA提供)。
这意味着我无法访问.pem或.crt文件。相反,证书本地存储在Windows AD(或本地存储)中,我无法导出私钥(出于明显的安全原因)。
但CA也提供了允许将证书(如果您的USB密钥已插入)注册到您喜欢的浏览器的驱动程序。
所以我尝试了以下测试项目:
app.component.ts
import {Component, OnInit} from '@angular/core';
import {Http, Response, RequestOptions, Headers} from '@angular/http';
import {HttpClient} from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'TEST API';
url = 'https://myAPIurl/lgcMessagerieInbox';
result = '';
constructor(private http: HttpClient) {
}
ngOnInit(): void {
}
testAPIcall(): void {
this.http.get(this.url)
.subscribe(
data => {
console.log(data);
},
error => {
console.log(error);
}
);
}
}
app.component.html
<div class="container">
<h1>
{{ title }}
</h1>
<button class="btnStandard" type="button" (click)="testAPIcall()" >TEST</button>
<div *ngIf="result">
{{ result }}
</div>
</div>
第一个好消息是,浏览器自动检测到API正在询问证书并打开窗口,以便我可以选择证书,输入我的密码并发送http请求。
但它失败了,因为服务器不接受CORS请求(https://www.html5rocks.com/en/tutorials/cors/)。
所以我虽然使用Angular提供的本地代理来重定向请求,因此浏览器不会因为域名不同而阻止它。但后来我无法通过代理传递证书。
我的问题是: