javascript - Jwt 无法解析,Okta
问题描述
我正在尝试在我的 React 应用程序上设置 Okta 身份验证。在客户端,我能够成功验证并获得访问令牌。但是,当我尝试使用 OktaJwtVerfier 对后端服务进行身份验证时,我收到错误消息:“无法解析 Jwt。SyntaxError:位置 0' 处的 JSON 中的意外标记
我开发了一个非常简单的测试程序来测试令牌的验证,所以基本上我在浏览器上获得了身份验证,我将 jwt 令牌复制粘贴到我的小脚本中以测试身份验证,它失败并显示上面的消息,我是什么做错了吗?
const OktaJwtVerifier = require('@okta/jwt-verifier');
const oktaJwtVerifier = new OktaJwtVerifier({
issuer: "https://dev-XXXXX.oktapreview.com/oauth2/default",
clientId: "XXXXXX",
assertClaims: {
'aud': 'api://default',
'cid': "XXXXXX",
},
});
const accessToken = 'Bearer eyJraWQiO.....';
oktaJwtVerifier.verifyAccessToken(accessToken).then((jwt) => {
console.log('auth succesfulll', jwt);
}).catch((e)=> {
console.log(e);
})
解决方案
@jps 的评论是正确的。您的标头的值为,要解析的实际 JWT 字符串Bearer XXXX
在哪里。XXXX
以下是 Okta 项目中他们如何在 Express 应用程序中执行此操作的示例:
const authHeader = req.headers.authorization || '';
const match = authHeader.match(/Bearer (.+)/);
if (!match) {
res.status(401);
return next('Unauthorized');
}
const accessToken = match[1];
您可以在此处查看完整上下文中的代码。
您的代码可以修改如下:
const headerValue = 'Bearer eyJraWQiO.....';
const match = headerValue.match(/Bearer (.+)/);
if (!match) {
throw new Error('your error message here')
}
const accessToken = match[1];
oktaJwtVerifier.verifyAccessToken(accessToken).then((jwt) => {
console.log('auth succesfulll', jwt);
}).catch((e)=> {
console.log(e);
})
推荐阅读
- android - 在 Android Studio 中为媒体播放器使用多个音频源
- css - 在移动设备上隐藏内联 CSS
- reactjs - Prettier In VS Code 不断修剪代码之间的空间
- ios - 为什么我不能更改嵌套模型中的值?
- python - Python 屏幕截图
- c# - 以编程方式将粗体格式应用于 Powerpoint 文本框上的特定文本
- azure - 在 azure devops 中:将 docker 容器部署到 azure 时,如何将管道变量作为 appsettings 注入?
- amazon - 我们可以为单个帐户创建多个 mws 访问权限和密钥吗?
- android - 如何在 kotlin 中使用 amplify 从 AWS S3 中删除特定文件夹?
- python - ThreadPoolExecturor 未来永远不会完成