微软azure定时任务获取微软AD的User Groups所有成员信息
Author:zhoulujun 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概念和原理学习笔记
下一篇:最后一页