oAuth 2.0 访问令牌验证 node.js
Posted
技术标签:
【中文标题】oAuth 2.0 访问令牌验证 node.js【英文标题】:oAuth 2.0 access token validation node.js 【发布时间】:2019-08-08 13:18:48 【问题描述】:我有一个用 node.js express 框架编写的后端 API。我需要用它实现 oAuth 2.0(client_credentials 授权类型)。我知道前端(API 的调用者)正在使用 client_id 和 client_secret 请求https://login.microsoftonline.com/IDENTIFIER_STRING/oauth2/token 并获取访问令牌作为响应。之后,FE 将使用带有访问令牌的 Authorization 标头将请求发送到我的 API。现在我的问题是如何验证该访问令牌并将访问权限授予请求者?我是否必须在一些公钥和一些 node.js 库的帮助下将其作为 JWT 离线验证?还是我必须通过将访问令牌发送到类似于令牌端点的 oAuth 提供者的某个端点来在线完成?
【问题讨论】:
【参考方案1】:作为令牌消费者,验证是离线完成的,除非发行者另有说明。
您应该使用 JWT 库,不要滚动您自己的验证逻辑,正确实现并非易事。
将 MSAL 用于 Azure ADv2 应用程序 - https://github.com/AzureAD/microsoft-authentication-library-for-js https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics
对于 v1,使用旧版 ADAL - https://github.com/AzureAD/azure-activedirectory-library-for-js
v1 与 v2 端点 - https://docs.microsoft.com/en-us/azure/active-directory/develop/azure-ad-endpoint-comparison
Azure AD 符合 OAuth 2.0 和 Open ID Connect。这确实意味着您也应该能够使用 3rd 方库来验证 JWT。
【讨论】:
感谢您的回答。但是您提到的库似乎是用于生成令牌而不是用于验证令牌。但是,我能够找到一些其他库来做同样的事情。还有一个问题。为了验证提供给我的访问令牌,我需要任何密钥/公钥吗?如果是,在哪里可以找到该密钥? MSAL/ADAL 也可以验证 JWT - 请参阅此示例 github.com/Azure-Samples/…。不,您不需要将 JWT 验证库指向公钥,在 OAuth 2.0 标准中有一个发现文档。 @evilSnobu 感谢express
示例。有没有在没有express
库的情况下做同样事情的例子?具体来说,在 NodeJS Azure 函数中?以上是关于oAuth 2.0 访问令牌验证 node.js的主要内容,如果未能解决你的问题,请参考以下文章
具有公共访问权限的 Web 应用程序的 Google OAuth 2.0 刷新令牌