使用没有CORS的客户端证书进行身份验证

时间:2018-02-27 15:20:01

标签: windows angular authentication cors ssl-certificate

我希望能够使用我的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提供的本地代理来重定向请求,因此浏览器不会因为域名不同而阻止它。但后来我无法通过代理传递证书。

我的问题是:

  • 有没有办法直接在本地windows上读取证书 从我的Angular应用程序存储? 我几乎可以肯定,如果我没有 相信我过去3天在互联网上搜索的内容。
  • 如何通过代理(Angular或其他任何东西)传递证书?
  • 如果上面的两个选项不可用,你知道一种知道约束的方法来访问API(使用其他技术,但它必须是 跨平台)?

0 个答案:

没有答案