微软azure定时任务获取微软AD的User Groups所有成员信息
Date:
基于LDAP同步
要从Active Directory (AD) 同步用户组信息,这通常涉及到LDAP(轻量目录访问协议),因为AD是基于LDAP构建的。
LDAP详情,可以阅读《LDAP概念和原理学习笔记》
基于这个方案,有2个库可以选择,分别
active-directory
ldapjs
active-directory
文档参考:https://github.com/jsumners/node-activedirectory
// server.js const express = require('express'); const ActiveDirectory = require('active-directory2'); const app = express(); const port = 3000; // 配置AD连接 const ad = new ActiveDirectory({ url: 'ldap://your-ad-server', // 替换为你的AD服务器URL baseDN: 'dc=yourdomain,dc=com', // 替换为你的域名 username: 'your-admin-username', // 替换为有权访问AD的用户名 password: 'your-admin-password' // 替换为有权访问AD的密码 }); // 路由:获取用户组 app.get('/user-groups', (req, res) => { const groupName = req.query.groupName || ''; // 可选:根据组名过滤 ad.findUsers({ group: groupName }, (err, users) => { if (err) { return res.status(500).json({ error: err.message }); } res.json(users); }); }); app.listen(port, () => { console.log(`Server running at http://localhost:${port}`); });
文档已经非常细了,首推这个
ldapjs
要从Active Directory (AD) 同步用户组信息到Node.js应用程序,你需要使用一些库来帮助你与AD通信。这通常涉及到LDAP(轻量目录访问协议),因为AD是基于LDAP构建的。
曾经,https://github.com/ldapjs/node-ldapjs ,但是他已经被解散了
var ldap = require('ldapjs'); var client = ldap.createClient({ url: 'ldap://your-ad-server.com' }); // 连接到AD服务器 client.bind('username', 'password', function(err) { if (err) throw err; console.log('Connected to AD server'); }); client.search('ou=Groups,dc=example,dc=com', { filter: '(objectClass=group)', scope: 'sub', attributes: ['cn', 'member'] }, function(err, res) { if (err) throw err; res.on('searchEntry', function(entry) { console.log('Group found:', entry.object); }); res.on('end', function() { console.log('Search completed'); }); });
微软原生库
当然,个人建议还是直接通过微软的API去获取,但是的我项目中已经使用了microsoft-graph其他内容,所以干脆用这个库来做这个
import { ClientCredentialClient } from '@azure/msal-node' import { Client } from '@microsoft/microsoft-graph-client' import dotenv from 'dotenv' dotenv.config() const data = { agent: { clientId: process.env.AGENT_CLIENT_ID, tenantId: process.env.AGENT_TENANT_ID, clientSecret: process.env.AGENT_TENANT_ID }, staff: { clientId: process.env.STAFF_CLIENT_ID, tenantId: process.env.STAFF_TENANT_ID, clientSecret: process.env.STAFF_CLIENT_SECRET } } // 配置MSAL应用参数 const config = { auth: { clientId: data.agent.clientId, authority: `https://login.microsoftonline.com/${data.agent.tenantId}`, clientSecret: data.agent.clientSecret } } // 创建ClientCredentialClient实例 const cca = new ClientCredentialClient(config) // 获取访问令牌的函数 async function getToken() { const tokenRequest = { scopes: ['https://graph.microsoft.com/.default'] } try { const response = await cca.acquireToken(tokenRequest) return response.accessToken } catch (error) { console.error('Error acquiring access token:', error.message) if (error.response) { console.error('Response body:', error.response.body) } throw error } } // 初始化Graph客户端 async function initializeGraphClient(accessToken) { const graphClient = Client.initWithMiddleware({ authProvider: (request) => { request.headers.Authorization = `Bearer ${accessToken}` } }) return graphClient } // 获取用户组的函数 async function getUserGroups() { try { const accessToken = await getToken() const graphClient = await initializeGraphClient(accessToken) const groups = await graphClient.api('/groups').get() console.log(groups) } catch (error) { console.error('Error fetching groups:', error) } } // 调用函数 getUserGroups()
转载本站文章《微软azure定时任务获取微软AD的User Groups所有成员信息》,
请注明出处:https://www.zhoulujun.cn/html/OS/Linux/DevOps/9316.html
上一篇:LDAP概念和原理学习笔记
下一篇:最后一页