Вопрос

LDAP ObjectSID

Привет,

Есть вопрос

Версия: 7.13.4.638_SalesEnterprise_Marketing

Место: LDAP интеграция

Описание: Пишу интеграцию со сторонней системой.

Система передает набор данных в бизнес процесс. Среди данных есть SID формата S-1-5-21-1507001333-1204550764-1011284298-1003. В BPM настроена интеграция LDAP. В свойствах интеграции идентификатор пользователя задан как objectSid. Однако в БД в [LDAPElement].[LDAPEntryId] записана строка, по формату отличающаяся от SID. Я предполагаю, что в данное поле пишется SID, но перед этим он проходит обработку.

Вопрос: Есть ли в backend api Terrasoft метод/класс, позволяющий получить корректный SID пользователя? И если нет, то каким образом я могу выполнить преобразование из значения LDAPElement].[LDAPEntryId] в SID?

Нравится

2 комментария
Лучший ответ

Логика работы с LDAP реализована в БП SyncWithLDAPProcess, схемах LDAPSysSettingsService, SyncWithLDAPProcessHelper, LDAPUtility, LDAPUtilities. В последней встречается функция, вызывающая подозрение, что обработка заключается в банальном взятии хэша MD5:

private string GetEntryIdentityAttribute(SearchResultEntry entry, string attributeName) {
	object attributeValue = entry.Attributes[attributeName][0];
	if (!(attributeValue is byte[])) {
		return Convert.ChangeType(attributeValue, typeof(string)).ToString();
	}
	var hasher = MD5.Create();
	byte[] data = hasher.ComputeHash(attributeValue as byte[]);
	var sb = new StringBuilder(512);
	for (int i = 0; i < data.Length; i++) {
		sb.Append(data[i].ToString("x2"));
	}
	return sb.ToString();
}

Соответственно, получить обратно objectSid в описанном формате по нему не получится.

Логика работы с LDAP реализована в БП SyncWithLDAPProcess, схемах LDAPSysSettingsService, SyncWithLDAPProcessHelper, LDAPUtility, LDAPUtilities. В последней встречается функция, вызывающая подозрение, что обработка заключается в банальном взятии хэша MD5:

private string GetEntryIdentityAttribute(SearchResultEntry entry, string attributeName) {
	object attributeValue = entry.Attributes[attributeName][0];
	if (!(attributeValue is byte[])) {
		return Convert.ChangeType(attributeValue, typeof(string)).ToString();
	}
	var hasher = MD5.Create();
	byte[] data = hasher.ComputeHash(attributeValue as byte[]);
	var sb = new StringBuilder(512);
	for (int i = 0; i < data.Length; i++) {
		sb.Append(data[i].ToString("x2"));
	}
	return sb.ToString();
}

Соответственно, получить обратно objectSid в описанном формате по нему не получится.

Зверев Александр,

Спасибо!

Показать все комментарии