我正在使用next.js构建一个Web应用程序,并使用react native构建一个移动的应用程序。这两个应用程序都使用node.js和express作为后端。对于身份验证,我尝试使用Kinde(https://kinde.com/).虽然我设法在我的next.js应用程序中成功验证用户(还没有在react native中尝试过)并通过使用Kinde来保护我的后端API路由,我很难从next.js应用程序访问我受保护的API路由,尽管两者都使用Kinde。
我可以通过以下方式从Kinde获得accessToken(以及其他):
import {getKindeServerSession} from "@kinde-oss/kinde-auth-nextjs/server";
import Link from "next/link";
export default async function Home() {
const {
getAccessToken,
getBooleanFlag,
getFlag,
getIntegerFlag,
getOrganization,
getPermission,
getPermissions,
getStringFlag,
getUser,
getUserOrganizations,
isAuthenticated
} = getKindeServerSession();
[...]
}
字符串
但似乎上面的选项都不符合Kinde对Express服务器的期望。
也不通过“protectRoute”:
const { protectRoute } = require("@kinde-oss/kinde-node-express");
app.get("/admin", protectRoute, (req, res) => {
res.send("Welcome to the admin area");
});
型
也不通过“验证者”:
const {jwtVerify} = require("@kinde-oss/kinde-node-express");
const verifier = jwtVerify("https://<your_kinde_subdomain>.kinde.com");
app.get("/some-route", verifier, (req, res) => {
console.log(req.user);
});
型
有人能描述一下如何访问受保护的路由吗?
1条答案
按热度按时间wnavrhmk1#
gettoken函数的结果是token的反结构JSON对象,您不能使用此值或任何值直接发送到您的服务器进行身份验证。安全的方法是获取access_token的cookie值,并将其发送到需要身份验证的服务器路由的每个请求中。
在NextJS应用程序中,获取原始access_token cookie值,并将其设置为请求中的标头
字符串
在您的服务器上,您可以使用
型
并确保您的受众与启用管理API的NextJS环境变量(KINDE_AUDIENCE=https://xxx.kinde.com/api)中的受众相同。
现在,您可以在中间件中简单地执行此操作,获取NextJS发送的令牌并对其进行解析
型
payload
将返回反结构化的JWT,您可以在其中检查反结构化的标记值