我使用Azure AD B2C登录到Reaction Native应用程序.这个应用程序可以对CMS(Strapi)进行API调用.在返回响应之前,CMS必须判断发出请求的用户是否已登录.

应用程序中的登录部分工作正常,这是我登录后在应用程序中返回的数据:

{
  "tokenType": "Bearer",
  "refreshToken": "...",
  "scope": "offline_access openid",
  "idToken": "...",
  "issuedAt": 1698310667
}

然后,该应用程序在报头x-activedirectory-token中发送idToken.

我不知道如何判断CMS策略(中间件)中令牌的有效性.我try 了@azure/msal-node包,但找不到只判断令牌是否有效的方法.

These Azure docs在主题上设置了Express-Passport中间件,但Strapi使用了不同的路由(KOA),在中间件中添加中间件似乎很奇怪.

首选的解决方案是可以判断令牌的@azure/msal-node包,或者一些Azure端点或类似的东西.

也许我忽略了一些事情,因为我几乎没有Azure广告经验.这就是说,任何帮助都是非常感激的,因为我已经被困在这个问题上有一段时间了.

推荐答案

谢谢你给我指明了正确的方向.我设法通过使用jwks-rsa和jsonwebtoken库来获得所需的行为.这是如何工作的代码示例(基于jsonwebtoken readme中的代码示例):

import {
  verify as verifyJwt,
  type JwtHeader,
  type SigningKeyCallback,
} from "jsonwebtoken";
import jwksClient from "jwks-rsa";

// Gets the cookie information from the discovery document
const client = jwksClient({
  jwksUri: "https://.../discovery/v2.0/keys?p=b2c_1_signin",
});

function getPublicKey(header: JwtHeader, callback: SigningKeyCallback) {
  client.getSigningKey(header.kid, function (err, key) {
    let signingKey = key.getPublicKey();
    if (!signingKey && "rsaPublicKey" in key && key.rsaPublicKey) {
      signingKey = key.rsaPublicKey;
    }

    callback(null, signingKey);
  });
}

// Verify the token with the public key, constructed by the jwksClient
verifyJwt(activeDirectoryToken, getPublicKey, {}, (err) => {
  if (err) {
    // Invalid token
    return;
  }

  // Valid token
});

Javascript相关问答推荐

如何在使用fast-xml-parser构建ML时包括属性值?

在页面上滚动 timeshift 动垂直滚动条

如何从JSON数组添加Google Maps标记—或者如何为数组添加参数到标记构造器

将字符串UTC Date转换为ngx—counting leftTime配置值的数字

在Three JS中看不到补间不透明度更改效果

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

实现JS代码更改CSS元素

如何在输入元素中附加一个属性为checkbox?

Next.js服务器端组件请求,如何发送我的cookie token?

从页面到应用程序(NextJS):REST.STATUS不是一个函数

DOM不自动更新,尽管运行倒计时TS,JS

如何使用JS创建一个明暗功能按钮?

Vaadin定制组件-保持对javascrip变量的访问

当我try 将值更改为True时,按钮不会锁定

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

如何用javascript更改元素的宽度和高度?

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

在每次重新加载页面时更改指针光标

如何调整下拉内容,使其不与其他元素重叠?