node.js - 如何使用nodejs api对react.js应用程序的azure广告帐户进行身份验证?

标签 node.js reactjs azure authentication adal.js

我正在尝试创建一个前端使用 React、后端使用 Node.js 的 Web 应用程序。 我希望我的用户使用他们的 Microsoft 公司帐户对应用程序进行身份验证。

我尝试使用this来自微软的文档,但这让我感到困惑。 据我了解,步骤如下:

  1. 用户请求网络服务器运行应用
  2. 浏览器下载 React SPA 并使用 react-adal包,将用户重定向到 Azure AD 身份验证 URL,即 https://login.microsoftonline.com
  3. 用户成功验证身份后,它会向客户端的浏览器发送 token
  4. 我认为下一步是将请求发送到nodejs服务器,并在请求头中使用该 token ,这是正确的吗?

这是我在文档中找到的内容:

The token is cached and the client attaches it to the request as the bearer token when making calls to its Web API back end, which is secured using the OWIN middleware.

但是什么是 OWIN 中间件以及如何在我的 Nodejs 应用程序中使用它来确保 token 有效并由 Microsoft 为该用户生成?

最佳答案

以下是获取有关 api 的信息的链接:

https://login.microsoftonline.com/common/.well-known/openid-configuration 或者 https://login.windows.net/common/.well-known/openid-configuration

根据上面的链接,这里是公钥的链接:

https://login.windows.net/common/discovery/keys

正如您所看到的,那里有 3 个公钥,从 token 的 header 中您可以找到哪一个是您的 token 。

现在使用 jsonwebtoken 包我可以验证 token :

const options = { 
  algorithms: ['RS256'], 
  audience: [`${appId}`],
  issuer: ['https://sts.windows.net/{your tenant ID}/'],
  ignoreExpiration: false,
  ignoreNotBefore: false,
};
const jwt = require('jsonwebtoken');
try {
  const decoded = jwt.verify(token, publicKey, options);
  return decoded;
} catch (error) {
  console.log(error);
  return false;
}

有关包的更多信息: https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback

但当我添加标准开始和结束字符时它会起作用:

const publicKey = `
-----BEGIN CERTIFICATE-----
${key}
-----END CERTIFICATE-----
`;

这是一篇博客文章,可以帮助我找到答案:

https://nicksnettravels.builttoroam.com/post/2017/01/24/Verifying-Azure-Active-Directory-JWT-Tokens.aspx

关于node.js - 如何使用nodejs api对react.js应用程序的azure广告帐户进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48288606/

相关文章:

javascript - 如何为(Angularjs)Web 应用程序进行集成测试

javascript - 为什么我不能将其转换为自定义 React hook?

javascript - React.js 不在 URL 中使用路由器传递参数

在选定的同一区域中显示 Azure 函数时,Azure 逻辑应用不显示函数

javascript - 将无符号整数转换为字符串,其字节是整数的 256 位 (BE) 表示形式?

node.js - Sequelize查询执行顺序错误

javascript - 每当远程主机关闭套接字连接时,Node.js 应用程序就会崩溃

javascript - 复制 React 组件属性时,扩展语法会出错

c# - 如何在 C# 中获取 azure Devops Rest api 调用的连续 token 以获取所有测试运行?

azure - 使用 PySpark 从 Azure HDInsight 检索数据