【问题标题】:Active Directory Integration issue NodejsActive Directory 集成问题 Nodejs
【发布时间】:2017-08-03 07:08:11
【问题描述】:

我是 Node js 新手,我想使用 Azure Active Directory 进行身份验证。如Here所述,我下载了Node并安装了NPM

npm install express
npm install ejs
npm install ejs-locals
npm install restify
npm install mongoose
npm install bunyan
npm install assert-plus
npm install passport
npm install passport-azure-ad

之后根据文档,我遵循 第 3 步:设置您的应用以使用 passport-node-js 策略

这里是 config.js

exports.creds = {
    returnURL: 'https://hpe.onmicrosoft.com/8d332647-xxxx-4xxc-8xx-11776XXXXX',
    identityMetadata: 'https://login.microsoftonline.com', // For using Microsoft you should never need to change this.
    clientID: '22XXXX9-b5fa-XXXXb-bc7a-XXXXXXXa92a',
    clientSecret: 'Srekv8dM1NqP4Sqnxxxxxxxxxxxx', // 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
 };

以及我编写的其余代码,如文档中所述。

但是当我运行 app.js 时遇到问题。

C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-skeleton\node_modules\passport-azure-ad\lib\validator.js:51
      throw new TypeError(`Invalid value for ${item}.${checker.error}`);
      ^

TypeError: Invalid value for redirectUrl.The URL must be valid and be https://
    at Object.keys.forEach (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-skeleton\node_modules\passport-azure-ad\lib\validator.js:51:13)
    at Array.forEach (native)
    at Validator.validate (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-skeleton\node_modules\passport-azure-ad\lib\validator.js:37:28)
    at new Strategy (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-skeleton\node_modules\passport-azure-ad\lib\oidcstrategy.js:495:13)
    at Object.<anonymous> (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-skeleton\app.js:42:14)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)

请帮帮我..

问候 尼库尼

试一试: 我尝试了南宇的建议代码,我得到了错误:

(node:2628) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client

events.js:182
      throw er; // Unhandled 'error' event
      ^
MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-master\node_modules\mongodb\node_modules\mongodb-core\lib\topologies\server.js:329:35)
    at emitOne (events.js:115:13)
    at Pool.emit (events.js:210:7)
    at Connection.<anonymous> (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-master\node_modules\mongodb\node_modules\mongodb-core\lib\connection\pool.js:280:12)
    at Object.onceWrapper (events.js:318:30)
    at emitTwo (events.js:125:13)
    at Connection.emit (events.js:213:7)
    at Socket.<anonymous> (C:\Nikunj Data\Project\Active Directory\WebApp-OpenIDConnect-NodeJS-master\node_modules\mongodb\node_modules\mongodb-core\lib\connection\connection.js:187:49)
    at Object.onceWrapper (events.js:316:30)
    at emitOne (events.js:115:13)
    at Socket.emit (events.js:210:7)
    at emitErrorNT (internal/streams/destroy.js:62:8)
    at _combinedTickCallback (internal/process/next_tick.js:102:11)
    at process._tickCallback (internal/process/next_tick.js:161:9)

【问题讨论】:

    标签: javascript node.js azure azure-active-directory


    【解决方案1】:

    请参考代码示例:Azure Active Directory OIDC Web Sample

    重定向 URL 应与在 AAD 中为您的应用注册的回复 URL 匹配。在那个文档中,它是http://localhost:3000/auth/openid/return

    更新

    要使代码示例https://github.com/AzureADQuickStarts/WebApp-OpenIDConnect-NodeJS 工作,请参考以下步骤:

    1. 登录 Azure 门户。

    2. 在顶部栏上,单击您的帐户,然后在目录列表下,选择您希望在其中注册应用程序的 Active Directory 租户。

    3. 单击左侧导航中的更多服务,然后选择 Azure Active Directory。

    4. 点击App registrations并选择添加。

    5. 输入应用程序的友好名称,例如“WebApp-OpenIDConnect-nodejs”并选择“Web 应用程序和/或 Web API”作为应用程序类型。对于登录 URL,输入示例的基本 URL,默认为 http://localhost:3000/。单击创建以创建应用程序。

    6. 仍在 Azure 门户中时,选择您的应用程序,单击 Settings 并选择 Reply URLs。添加回复地址:http://localhost:3000/auth/openid/return,点击保存按钮。

    7. 找到应用程序 ID 值并将其复制到剪贴板。在代码示例中打开config.js 文件,将clientID 替换为应用程序ID 值。

    8. identityMetadata设置为租户的域名或guid。

    9. 在 Azure 门户中,选择您的应用程序,单击 Settings 并选择 Keys。添加应用密钥并复制到config.js中的clientSecret

    10. 如果要将 mongoDB 会话存储用于会话中间件,请将 useMongoDBSessionStore 设置为 true,请将正确的数据库 url 值更新为 exports.databaseUri .,否则将 useMongoDBSessionStore 设置为 false 以使用默认会话存储。

    11. 运行应用程序。在终端中使用以下命令:node app.js

    12. 打开浏览器,输入http://localhost:3000 并试用您的应用。

    【讨论】:

    • (node:2628) DeprecationWarning: open() 在 mongoose >= 4.11.0 中已弃用,请改用openUri(),或者如果使用connect()createConnection(),请设置useMongoClient 选项.见mongoosejs.com/docs/connections.html#use-mongo-clientevents.js:182 throw er; // 未处理的“错误”事件 ^ MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017] at Pool. (C:\Nikunj Data\Project\Active ......................
    • 为了测试,如果你想为 express-session 使用默认会话存储,请将 config.js 中的 exports.useMongoDBSessionStore 设置为 false。
    • 我将其设为 False 并使用 'node app.js' 运行,但此处光标在第二行闪烁,此处未显示任何内容。现在既没有输出也没有错误
    • 1. mongoDB 错误意味着 mongodb 服务器不可用,请检查。 2.在node app.js之后,打开浏览器,输入http://localhost:3000查看网站是否正在运行。
    • 是的,在 localhost 中显示“欢迎!请登录。”当我点击“登录”时,什么也没有发生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2020-09-08
    • 2019-12-17
    相关资源
    最近更新 更多