【问题标题】:Trigger client certificate request on button click单击按钮触发客户端证书请求
【发布时间】:2020-10-06 17:41:57
【问题描述】:

我有一个由express Web 服务器提供服务的 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 形式返回证书信息。

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

【问题讨论】:

  • 我唯一的想法是将 React 应用程序与express 服务器分开托管(在 S3 存储桶中),但我不知道这是否可行。

标签: reactjs express tls1.2 cac


【解决方案1】:

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

<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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多