Как загрузить файл изображения на профиль Пользователя Active Directory в C#?

Мне нужен метод, который возьмет *.jpg файл изображения и загрузит его на профиль пользователя в Active Directory Windows AD 2003.

Также метод, чтобы получить фотографию как поток или выставить его как защищенный веб-сервис, который назовут кросс-платформенные приложения в Java и т.д. (Чертовски! я спрашивающий слишком много!!!)

Загружаемый файл будет *.jpg, который является в основном визуальным файлом подписи, созданным пользователем.

Делает любой имеющий любой опыт, работающий с Active Directory в C#, предоставляет некоторую информацию относительно того, как это может быть сделано с минимальной импликацией, связанной с безопасностью.

С точки зрения Windows Active Directory Administrator, что он должен сделать для создания этого возможным. Изменения/условия в схеме профиля пользователя и т.д.

Изображение загружается так, чтобы оно могло быть позже получено от AD, который будет вставлен в документ в формате PDF в целях подписи.

Это может быть сделано в C#? Или есть ли и т.д. какие-либо сделанные библиотеки?

16
задан Kiquenet 11 June 2018 в 11:41
поделиться

3 ответа

Вот серия постов в блоге с кодом, показывающим, как это сделать:

(Первая показывает, как достать фотографию, вторая - как ее достать)

Использование атрибута 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 (но это может быть только в моей организации)

.
15
ответ дан 30 November 2019 в 21:28
поделиться

Общим атрибутом 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;
}

}
13
ответ дан 30 November 2019 в 21:28
поделиться

У каждого профиля пользователя Active Directory будет домашняя папка. Если вы не уверены в этом, ознакомьтесь со статьей ниже. http://support.microsoft.com/kb/816313 Я считаю, что вам нужно загрузить файл изображения в этот каталог.

Также, если это не решит вашу проблему, обновите, если вы найдете что-то еще.

MNK ...

-2
ответ дан 30 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: