Мне нужен метод, который возьмет *.jpg файл изображения и загрузит его на профиль пользователя в Active Directory Windows AD 2003.
Также метод, чтобы получить фотографию как поток или выставить его как защищенный веб-сервис, который назовут кросс-платформенные приложения в Java и т.д. (Чертовски! я спрашивающий слишком много!!!)
Загружаемый файл будет *.jpg, который является в основном визуальным файлом подписи, созданным пользователем.
Делает любой имеющий любой опыт, работающий с Active Directory в C#, предоставляет некоторую информацию относительно того, как это может быть сделано с минимальной импликацией, связанной с безопасностью.
С точки зрения Windows Active Directory Administrator, что он должен сделать для создания этого возможным. Изменения/условия в схеме профиля пользователя и т.д.
Изображение загружается так, чтобы оно могло быть позже получено от AD, который будет вставлен в документ в формате PDF в целях подписи.
Это может быть сделано в C#? Или есть ли и т.д. какие-либо сделанные библиотеки?
Вот серия постов в блоге с кодом, показывающим, как это сделать:
(Первая показывает, как достать фотографию, вторая - как ее достать)
Использование атрибута jpegPhoto в AD - Часть I
Использование атрибута jpegPhoto в AD - Часть II
EDIT: Вот общая функция, реализующая код из Части I:
void AddPictureToUser(
string strDN, // User Distinguished Name, in the form "CN=Joe User,OU=Employees,DC=company,DC=local"
string strDCName, // Domain Controller, ie: "DC-01"
string strFileName // Picture file to open and import into AD
)
{
// Open file
System.IO.FileStream inFile = new System.IO.FileStream(strFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
// Retrive Data into a byte array variable
byte[] binaryData = new byte[inFile.Length];
int bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length);
inFile.Close();
// Connect to AD
System.DirectoryServices.DirectoryEntry myUser = new System.DirectoryServices.DirectoryEntry(@"LDAP://" + strDCName + @"/" + strDN);
// Clear existing picture if exists
myUser.Properties["jpegPhoto"].Clear();
// Update attribute with binary data from file
myUser.Properties["jpegPhoto"].Add(binaryData);
myUser.CommitChanges();
}
EDIT: Я обнаружил, что в моей организации правильным атрибутом для установки был "thumbnailPhoto" вроде этого:
myUser.Properties["thumbnailPhoto"].Add(binaryData);
Это также похоже на ту, которую устанавливает коммерческий продукт Exclaimer (но это может быть только в моей организации)
.Общим атрибутом AD для пользовательской фотографии является jpegPhoto, но вы можете использовать любое имя
Этот образец показывает основной способ AD для получения и установки потока изображений. Вам нужно дополнить эти методы, чтобы быть полезным классом
Рассмотрим возможность сделать так, чтобы ваш веб-сервис просто возвращал URL изображения. Обработчик запроса на этот URL должен вернуть изображение с правильным типом содержимого и т.д. Намного полезнее в веб-среде
using System;
using System.DirectoryServices;
using System.Collections;
using System.IO;
public class ADPhoto {
public void Set() {
try {
var de = new DirectoryEntry("LDAP://cn=username,cn=users,DC=domain, DC=com");
de.Username = "username";
de.Password = "password";
var forceAuth = de.NativeObject;
var fs = new FileStream("path\\photo.jpg", FileMode.Open);
var br = new BinaryReader(fs);
br.BaseStream.Seek(0, SeekOrigin.Begin);
byte[] ba = new byte[br.BaseStream.Length];
ba = br.ReadBytes((int)br.BaseStream.Length);
de.Properties["jpegPhoto"].Insert(0, ba);
de.CommitChanges();
}
catch(Exception ex) {
Console.WriteLine(ex.Message);
}
}
public Stream Get() {
var fs = new MemoryStream();
try {
var de = new DirectoryEntry("LDAP://cn=username,cn=users,DC=domain, DC=com");
de.Username = "username";
de.Password = "password";
var forceAuth = de.NativeObject;
var wr = new BinaryWriter(fs);
byte[] bb = (byte[])de.Properties["jpegPhoto"][0];
wr.Write(bb);
wr.Close();
}
catch (Exception e) {
Console.WriteLine(e.Message);
}
return fs;
}
}
У каждого профиля пользователя Active Directory будет домашняя папка. Если вы не уверены в этом, ознакомьтесь со статьей ниже. http://support.microsoft.com/kb/816313 Я считаю, что вам нужно загрузить файл изображения в этот каталог.
Также, если это не решит вашу проблему, обновите, если вы найдете что-то еще.
MNK ...