是否有人成功使用Azure AD对Node.js web应用程序的用户进行身份验证?

是否有人成功使用Azure AD对Node.js web应用程序的用户进行身份验证?,node.js,azure,oauth-2.0,passport.js,azure-active-directory,Node.js,Azure,Oauth 2.0,Passport.js,Azure Active Directory,我正在尝试使用Azure Active Directory对node.js web应用程序的用户进行身份验证,但到目前为止没有成功 我想知道是否有人真的做到了,因为文档很差。通常有示例代码,但实际上没有任何指示说明所需的参数是什么以及它们应该是什么 我已经试过passport azure ad(我认为是来自Microsoft)和passport.azure-ad-oauth2(来自Auth0(?)。对于passport azure广告,我尝试了承载策略,也尝试了OIDCST策略,但没有成功 对于

我正在尝试使用Azure Active Directory对node.js web应用程序的用户进行身份验证,但到目前为止没有成功

我想知道是否有人真的做到了,因为文档很差。通常有示例代码,但实际上没有任何指示说明所需的参数是什么以及它们应该是什么

我已经试过passport azure ad(我认为是来自Microsoft)和passport.azure-ad-oauth2(来自Auth0(?)。对于passport azure广告,我尝试了承载策略,也尝试了OIDCST策略,但没有成功

对于BearerStrategy,我得到了一些关于我的客户机和资源识别同一个应用程序的神秘信息,但是由于没有文档告诉我这些应该是什么,我感到不知所措

对于OIDCStrategy,我更接近一点,因为我被重定向到Microsoft进行身份验证,但在返回时,我得到错误“error:ID Token not present in response”。我猜我的请求不够正确,无论出于什么原因都不能给我回一个令牌,但是因为没有文档…(你明白了)

无论如何,如果有人真的成功地实现了它,并且能够分享一些关于它是如何实现的指针,那就太好了


非常感谢。

下面是一个代码示例,它是关于将Azure AD集成到由Microsoft在GitHub上提供的NodeJS web应用程序中的

要使示例运行,您需要在示例代码中配置有关Azure广告的一些设置

我们可以在应用程序根目录中的
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
 };
exports.creds={
returnURL:'http://localhost:3000/auth/openid/return',
identityMetadata:'https://login.microsoftonline.com/common/.well-known/openid-configuration“,//对于使用Microsoft,您不需要更改此设置。
客户端ID:“”,
clientSecret:“”,//如果您正在执行代码或id\u令牌代码
skipUserProfile:true,//对于AzureAD,应设置为true。
responseType:'id\u token code',//对于仅登录的流,使用id\u token。对于访问资源,使用'id\u token code'`
responseMode:'query',//对于仅登录的流,我们应该在POST中将令牌传递回给我们
//作用域:['email','profile']//您可能希望传递的其他作用域
};
现在,您需要登录Azure管理门户,标题为Azure广告应用程序页面。单击配置选项卡来配置您的广告

  • config.js
    中的
    returnURL
    输入到单点登录部分下的
    回复URL
    表单中:

  • 将广告应用程序的Azure广告端点填充到
    config.js
    中的
    identityMetadata
    属性中。正如代码中的注释所述,如果您的Azure广告位于Microsoft域中,如: 那么你就不必改变设置了。否则,您需要将
    config.js
    中端点中的
    common
    替换为您的AD ID,您可以单击底部导航的查看端点以查找ID:

  • config.js
    中配置
    clientID
    clientSecret
    。您可以在广告应用程序的配置页面中找到它们: 关于关键点,您可以选择下拉列表以选择关键点的持续时间以创建新的关键点,单击底部导航的“保存”按钮,您可以在首次创建关键点时看到关键点数据

完成这些步骤后,您可以尝试示例项目。

对于我来说,这个(无代码解决方案)在以下环境中工作:

  • 主机my Node.js服务器
  • 向订阅添加广告
  • 在AD中注册新应用程序
  • 添加“”作为回复URL
  • 在AppServices中,选择Node.js服务器
  • 在设置中,转到身份验证/授权
  • 激活AAD
  • 使用AAD的高级模式
  • 输入上面在AD中注册的应用程序的客户端ID(GUID)
  • 当issuerURL输入此链接时:(如果您回顾在上面的AD中注册的应用程序,您可以在“端点”中看到GUID)

感谢您的回复。我试过了,但没用。最初的microsoft代码我的identityMetadata是,但自从将其更改为您的示例中的identityMetadata之后,我就幸运了一点……在将端点更改为
https://login.microsoftonline.com/common/.well-known/openid-configuration
?新(旧?)端点似乎可以工作。但我对此有点不舒服,因为这个例子有一个新的端点,为什么他们会在这个例子中使用一个不起作用的端点?非常感谢您的回复…如果您在
config.js
中将响应模式从
query
更改为
form\u post
,并检查响应正文,则在使用v2.0端点时会出现
错误描述:“此API版本不支持应用程序”
。然而,我也发现了这一点:,我想知道这是否与oauth2协议的工作原理有关。
https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
表单_post
?对我来说效果很好。您可以检查您的设置