是否有人成功使用 Azure AD 对 Node.js Web 应用程序的用户进行身份验证?
Posted
技术标签:
【中文标题】是否有人成功使用 Azure AD 对 Node.js Web 应用程序的用户进行身份验证?【英文标题】:Has anyone successfully used Azure AD to authenticate users for a Node.js web application? 【发布时间】:2016-05-02 00:15:24 【问题描述】:我正在尝试使用 Azure Active Directory 对我的 node.js Web 应用程序的用户进行身份验证,但到目前为止没有成功。
我想知道是否有人真的实现过它,因为文档很差。通常有示例代码,但实际上并没有任何指示所需参数是什么以及它们应该是什么。
我已经尝试过 passport-azure-ad(我认为来自 Microsoft)和 passport.azure-ad-oauth2(来自 Auth0(?))。对于 passport-azure-ad,我尝试了 BearerStrategy 和 OIDCStrategy,但没有成功。
对于 BearerStrategy,我收到一些关于我的客户端和资源识别同一应用程序的神秘消息,但由于没有文档告诉我这些应该是什么,我不知所措。
对于 OIDCStrategy,我更接近一点,因为我被重定向到 Microsoft 进行身份验证,但在返回时我收到错误“错误:响应中不存在 ID 令牌”。我猜我的请求不够正确,无论出于何种原因给我一个令牌,但由于没有文档......(你明白了)。
无论如何,如果有人真正成功地实现了它并且能够分享一些关于它是如何实现的指针,那就太好了。
非常感谢。
【问题讨论】:
【参考方案1】:对我来说,这个(无代码解决方案)在 new Azure Portal 中工作:
托管我的 Node.js 服务器 向订阅中添加广告 在 AD 中注册新应用程序 添加“https://YourNodeJS.azurewebsites.net/.auth/login/aad/callback”作为回复网址 在 AppServices 中,选择您的 Node.js 服务器 在设置中转到身份验证/授权 激活 AAD 使用 AAD 的高级模式 在 AD 中输入上面注册的应用程序的 ClientID (GUID) 作为 issuerURL 输入此链接:https://sts.windows.net/YourADGuid/(如果您回头查看上面在 AD 中注册的应用程序,您可以在“端点”中看到 GUID)【讨论】:
【参考方案2】:这是一个代码示例,它是关于将 Azure AD 集成到 Microsoft 在 GitHub 上提供的 NodeJS Web 应用程序中,地址为 https://github.com/Azure-Samples/active-directory-node-webapp-openidconnect。
为了使示例运行,您需要在示例代码中配置一些有关您的 Azure AD 的设置。
我们可以在应用根目录下的config.js
文件中找到如下内容:
exports.creds =
returnURL: 'http://localhost:3000/auth/openid/return',
identityMetadata: 'https://login.microsoftonline.com/common/.well-known/openid-configuration', // For using Microsoft you should never need to change this.
clientID: '<your app id>',
clientSecret: '<your secret>', // if you are doing code or id_token code
skipUserProfile: true, // for AzureAD should be set to true.
responseType: 'id_token code', // for login only flows use id_token. For accessing resources use `id_token code`
responseMode: 'query', // For login only flows we should have token passed back to us in a POST
//scope: ['email', 'profile'] // additional scopes you may wish to pass
;
现在您需要登录 Azure 管理门户,标题为您的 Azure AD 应用程序页面。点击CONFIGURE标签来配置您的AD。
将config.js
中的returnURL
输入到单点登录部分下的REPLY URL
表单中:
将 AD 应用程序的 Azure AD 端点填充到 config.js
中的 identityMetadata
属性中。正如代码中的注释所说,如果您的 Azure AD 在 Microsoft 域中,例如:
然后,您不必更改设置。否则,您需要将config.js
中端点中的common
替换为您的AD ID,您可以点击底部导航的VIEW ENDPOINT找到ID:
在config.js
中配置clientID
和clientSecret
。你们都可以在 AD 应用程序的 CONFIGRE 页面中找到它们:
关于密钥,您可以选择下拉选择一个密钥的持续时间来创建一个新的,点击底部导航的保存按钮,您可以在第一次创建它时看到密钥数据。
完成这些步骤后,您可以尝试示例项目。
【讨论】:
感谢您的回复。我确实尝试过,但没有奏效。最初的微软代码我的 identityMetadata 为login.microsoftonline.com/common/v2.0/.well-known/…,但自从将其更改为login.microsoftonline.com/common/.well-known/… 后,我的运气就更好了…… 将endpoint改成https://login.microsoftonline.com/common/.well-known/openid-configuration
后是否还会出现这个问题?
新的(旧的?)端点似乎可以工作。我对此有点不舒服,因为该示例具有似乎是较新的端点,为什么他们会在示例中使用不起作用的端点?非常感谢您的回复...
如果将config.js
中的响应模式从query
更改为form_post
并检查响应正文,使用v2.0端点时会出现error_description: 'Application \'application_id\' is not supported for this API version'
。但是我也发现了这个:github.com/AzureAD/passport-azure-ad/pull/55/files,我想知道它是否与 oauth2 协议的工作原理有关。
https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
与 form_post
?它在我这边工作正常。您可以检查您的设置以上是关于是否有人成功使用 Azure AD 对 Node.js Web 应用程序的用户进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章
基于 Azure AD 证书的身份验证:如何在 Node JS 中指定证书路径?
Electron + Vue + msal-nodejs + Azure Ad:重定向 URL 问题
如何使用 Azure AD B2C 获取 Facebook 个人资料图片