0

我有一个由expressWeb 服务器提供服务的 React 应用程序。在此应用程序中,当用户单击“登录”按钮时,我需要向用户请求客户端证书。这是为了使用通用访问卡进行授权。

我的express服务器使用https选项设置为需要客户端证书的模块。/authorize它会在访问网站时立即提示用户,但由于以下代码,我希望提示仅在访问/请求端点时显示:

# Serve React app
app.use(express.static(path.join(__dirname, "..", "build")));

# Request client certificate
app.get('/authenticate', (req, res) => {
    const cert = req.connection.getPeerCertificate()
...
});

https.createServer(opts, app).listen(9999)

我的“登录”按钮查询/authorize以 JSON 形式返回证书信息的端点。

如何构建此应用程序以维护当前功能,但仅在单击登录按钮后提示输入客户端证书?

4

1 回答 1

0

我在工作中开发的 react 应用程序具有 CAC 身份验证,但我坐在 apache 后面并将其用于我的 SSL 连接和证书信息。如果你有这个选项,你可以从 express 中删除 SSL 要求,并将其放在你的 react 应用程序前面,然后在你的 conf 文件中放置类似下面的代码片段,然后将其代理回来。

<If "%{REQUEST_URI} == '/authenticate' && %{REQUEST_METHOD} == 'POST'">
    SSLVerifyClient require
    SSLVerifyDepth  10

    RequestHeader set SSL_CLIENT_CN "%{SSL_CLIENT_S_DN_CN}s"

    SSLOptions +ExportCertData +StdEnvVars
</If>
于 2020-07-02T15:18:07.710 回答