如何使用 Azure 广告帐户对 react.js 使用 nodejs api 的应用程序进行身份验证?
how to authenticate with azure ad accounts to react.js app with nodejs api?
我正在尝试用 front-end 中的 React 和 back-end 中的 Node.js 创建一个 web-app。
我希望我的用户使用他们的 Microsoft 公司帐户对应用程序进行身份验证。
我尝试使用 Microsoft 的 this 文档,但它让我感到困惑。
据我了解,步骤如下:
- 用户请求 web-server 到 运行 应用程序
- 浏览器下载 React SPA 并使用 react-adal package, redirect user to Azure AD authentication URL which is https://login.microsoftonline.com
- 用户成功通过身份验证后,它会向客户端浏览器发送令牌
- 我认为下一步是在请求的 header 中使用该令牌向 nodejs 服务器发送请求,是否正确?
这是我在文档中找到的内容:
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 应用程序中使用它来确保令牌有效并由 Microsoft 为该用户生成?
令牌不过是一个 JSON Web 令牌 (JWT),您可以使用任何可用的 libraries/code 进行签名验证,并在验证过程中检查有效负载中的发行者和受众.参见 https://jwt.io/ for NodeJS libraries available. The public key to validate will be available through a URL when you register your application in Azure AD (as JWKS) something like https://login.windows.net/common/discovery/keys
这里是 link 以获取有关 api 的信息:
https://login.microsoftonline.com/common/.well-known/openid-configuration
或者
https://login.windows.net/common/.well-known/openid-configuration
并且基于上面的 link,这里是 link 到 public 键:
https://login.windows.net/common/discovery/keys
如您所见,那里有 3 个 public 密钥,您可以从令牌的 header 中找出哪一个是您的令牌。
现在使用 jsonwebtoken 包我可以验证令牌:
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-----
`;
这里有一篇博客 post 可以帮助我找到答案:
我正在尝试用 front-end 中的 React 和 back-end 中的 Node.js 创建一个 web-app。 我希望我的用户使用他们的 Microsoft 公司帐户对应用程序进行身份验证。
我尝试使用 Microsoft 的 this 文档,但它让我感到困惑。 据我了解,步骤如下:
- 用户请求 web-server 到 运行 应用程序
- 浏览器下载 React SPA 并使用 react-adal package, redirect user to Azure AD authentication URL which is https://login.microsoftonline.com
- 用户成功通过身份验证后,它会向客户端浏览器发送令牌
- 我认为下一步是在请求的 header 中使用该令牌向 nodejs 服务器发送请求,是否正确?
这是我在文档中找到的内容:
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 应用程序中使用它来确保令牌有效并由 Microsoft 为该用户生成?
令牌不过是一个 JSON Web 令牌 (JWT),您可以使用任何可用的 libraries/code 进行签名验证,并在验证过程中检查有效负载中的发行者和受众.参见 https://jwt.io/ for NodeJS libraries available. The public key to validate will be available through a URL when you register your application in Azure AD (as JWKS) something like https://login.windows.net/common/discovery/keys
这里是 link 以获取有关 api 的信息:
https://login.microsoftonline.com/common/.well-known/openid-configuration 或者 https://login.windows.net/common/.well-known/openid-configuration
并且基于上面的 link,这里是 link 到 public 键:
https://login.windows.net/common/discovery/keys
如您所见,那里有 3 个 public 密钥,您可以从令牌的 header 中找出哪一个是您的令牌。
现在使用 jsonwebtoken 包我可以验证令牌:
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-----
`;
这里有一篇博客 post 可以帮助我找到答案: