http://intown.biz/2016/11/22/node-client-auth/で説明されているように、ExpressでSSL認証を使用しようとしています。Express SSL認証機能がありませんか?
私たちは強いタイピングの利点のために、サーバーコード(クライアントの角度コードに加えて)にTypeScriptを使用しています。 私はExpress 4.14.1、@ types/express "を使用しています:"^4.0.36 "
上記のリンクは(ほとんどのサーバー側NodeJSの場合と同様に)JavaScriptであり、TypeScriptではありません。 (彼はプロジェクトをダウンロードするためのリンクがあります)
app.use(function (req, res, next) {
if (!req.client.authorized) {
return res.status(401).send('User is not authorized');
}
#examine the cert itself, and even validate based on that!
var cert = req.socket.getPeerCertificate();
if (cert.subject) {
console.log(cert.subject.CN);
}
next();
});
リンク作品に議論したアプリケーション
私の問題:次のように見えるのリンクインチの最新の標準es(4.0.36)はreq.clientまたはreq.socket.getPeerCertificate()を持っていないようです。 TypeScriptコードでは使用できません(私たちはExpressインポート/必須です)。また、 はTypeScriptリクエストオブジェクトをプレーンJavaScript関数に渡してみました。req.clientとreq.socket.getPeerCertificate()は未定義です。彼らはただ はありません。
注:パスポートは初期化されています。これを使用してWebアプリケーション(クライアントと内部REST API)を認証していますが、SSL証明書を使用して保護する外部/別個のREST API があります。 Passportを差し込むと、req.clientとreq.socket.getPeerCertificate()の機能が消えるのではないかと疑いがありますか?
Expressコードでreq.clientまたはreq.socket.getPeerCertificate()が表示されない理由を教えていただけますか?彼らは何かに取り替えられましたか?
これに関する助言/謝辞は高く評価されます。
'req.client'についてはわかりませんが、Expressのreq'オブジェクトは組み込みの' http.ClientRequest'の「拡張バージョン」であるため、 'req.socket'を定義する必要があります。 '](https://nodejs.org/api/http.html#http_request_socket)プロパティTLS接続の場合、これは['tls.TLSSocket'](https://nodejs.org/api/tls.html#tls_class_tls_tlssocket)のインスタンスで、[' .authorized'](https:// nodejs .org/api/tls。html#tls_tlssocket_authorized)および['.getPeerCertificate'](https://nodejs.org/api/tls.html#tls_tlssocket_getpeercertificate_detailed)の各プロパティがあります。 – robertklep
ああ、 'req.client'は' req.socket'([ここ](https://github.com/nodejs/node/blob/ae4fde8bc883686def5badfb324236320669e8f4/lib/_http_incoming.js#L71))と同じです。 – robertklep