繁体   English   中英

在 Node.js 中验证 Azure OAuth 令牌

[英]Verify Azure OAuth token in Node.js

我想验证从 Azure 授予 React 应用程序的 OAuth JWT 令牌。 经过一些研究,这就是我理解它应该实施的方式:

const getSigningKeys: jwt.GetPublicKeyOrSecret = (header, callback) => {
  const _client = jwksClient({
    jwksUri: `https://login.microsoftonline.com/${TENANT_ID}/discovery/v2.0/keys`,
  });
  _client.getSigningKey(header.kid, (err: any, key: any) => {
    const signingKey = key?.publicKey || key?.rsaPublicKey;
    callback(null, signingKey);
  });
};

export const verifyMicrosoftToken = async (tokenId: string): Promise<any> => {
  const validationOptions = {
    audience: CLIENT_ID, // v2.0 token
    iss: `https://login.microsoftonline.com/${TENANT_ID}/v2.0`, // v2.0 token
    algorithms: ['RS256' as Algorithm],
  };

  const decodedToken = await promisify(jwt.verify)(
    tokenId,
    getSigningKeys,
    validationOptions
  );

  return decodedToken;
};

我在这里错过了什么吗? 我不断收到以下错误:

JsonWebTokenError: secret or public key must be provided

此错误可能是由于 getSigningKeys 未返回公钥所致。 您应该检查传递给回调方法的 signingKey 的值。 如果 key 未定义,则 signingKey 将未定义,这将导致 JWT 错误。 也可以直接调用key.getPublicKey() function。

  client.getSigningKey(header.kid, (err, key: jwksClient.SigningKey) => {
    const signingKey = key.getPublicKey()
    callback(null, signingKey)
  })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM