不支持的证书用途 - NextAuth - 本地主机中的 SSL - 节点服务器

Vpp*_*Man 7 authentication openssl node.js next.js next-auth

我按照本教程设置https本地开发机器:https://dev.to/nakib/using-https-on-next-js-local-development-server-bcd

这是我使用的代码:

const { createServer } = require("https");
const { parse } = require("url");
const next = require("next");
const fs = require("fs");
const port = 3000;
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();

const httpsOptions = {
    key: fs.readFileSync('/some/path/to/rootCA-key.pem'),
    cert: fs.readFileSync('/some/path/to/rootCA.pem')
};



app.prepare().then(() => {
    createServer(httpsOptions, (req, res) => {
        const parsedUrl = parse(req.url, true);
        handle(req, res, parsedUrl);
    }).listen(port, (err) => {
        if (err) throw err;
        console.log("ready - started server on url: https://localhost:" + port);
    });

});
Run Code Online (Sandbox Code Playgroud)

并使用 NextAuth 进行身份验证。如果我尝试访问应用程序中的任何正常页面,一切都会正常(甚至身份验证)。但是,如果我访问应用程序的 API 端点,并尝试使用 检索数据sessionconst session = await getSession({ req })则会引发以下错误:

[next-auth][error][CLIENT_FETCH_ERROR] 
https://next-auth.js.org/errors#client_fetch_error request to https://localhost:3000/api/auth/session failed, reason: unsupported certificate purpose {
  error: {
    message: 'request to https://localhost:3000/api/auth/session failed, reason: unsupported certificate purpose',
Run Code Online (Sandbox Code Playgroud)

我相信这是因为我设置的 SSL 证书。我检查了错误消息中提到的链接以及NEXTAUTH_URLenv 文件中的链接是否正确。有没有办法绕过这个问题?

Tha*_*han 8

即使在内部进行内部 api 调用时,next-auth 也不信任自签名证书。
最快的修复方法是添加NODE_TLS_REJECT_UNAUTHORIZED=0到 .env.local,但不要在生产中执行此操作。

// 不知怎的,NODE_EXTRA_CA_CERTS=/path/to/selfsigned.crt从来没有为我工作过。