Skip to content

DEV-1565 поддержка Global Catalog#147

Open
a-trofimov wants to merge 1 commit into
mainfrom
feature/DEV-1565
Open

DEV-1565 поддержка Global Catalog#147
a-trofimov wants to merge 1 commit into
mainfrom
feature/DEV-1565

Conversation

@a-trofimov

Copy link
Copy Markdown
Collaborator

What's new:

  • Добавлен поиск пользователя через Global Catalog (порт 3268/3269)
  • Bind выполняется напрямую к контроллеру домена, определённому по DN пользователя
  • Добавлена обработка коллизий логина между доменами — уточнение по UPN-суффиксу, иначе явный отказ
  • Добавлено разрешение NetBIOS-домена в DOMAIN\user через Configuration NC
  • Добавлено повторное чтение полного профиля с контроллера домена после поиска через GC (GC отдаёт только частичный набор атрибутов)
  • Добавлен мгновенный отказ, если пользователь не найден через GC, без перебора остальных доменов
  • Добавлена валидация конфигурации: enable-trusted-domains нельзя сочетать с GC-подключением
  • Добавлено логирование времени поиска, bind и повторного чтения профиля

/// Нужен при поиске через Global Catalog, где sAMAccountName формально уникален
/// только в рамках домена (не леса).
/// </summary>
IReadOnlyList<ILdapProfile> ExecuteMany(FindUserDto request);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не надо так
Пиши тонкие порты
Выделим отдельный интерфейс

/// Нужен, чтобы явно указанный пользователем домен в DOMAIN\user не терялся при поиске
/// через Global Catalog. Возвращает null, если сопоставление не найдено.
/// </summary>
string? ResolveDomainDnsNameByNetBiosName(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не имеет отношение к интерфейсу
Скорее к UserIdentity

return null;
}

var globalCatalogConnectionString = new LdapConnectionString(context.LdapConfiguration.ConnectionString);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LdapConnectionString
Инфра просачивается в application

List<LdapAttributeName> attributes,
RadiusPipelineContext context)
{
var stopwatch = Stopwatch.StartNew();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Подозреваю что это нужно в инфре

ArgumentNullException.ThrowIfNull(globalCatalogConnectionString);
ArgumentException.ThrowIfNullOrWhiteSpace(domainDnsName);

var isSsl = globalCatalogConnectionString.Port == GlobalCatalogSslPort

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

кажется это функционал для ldap.core

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да и почти все остальное

/// Извлекает DNS-имя домена (например, "child.test.group") из DN пользователя,
/// найденного через GC (например, "CN=User1,OU=Users,DC=child,DC=test,DC=group").
/// </summary>
public static string ExtractDomainDnsName(this DistinguishedName dn)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется что метод не на своем месте

{
ArgumentNullException.ThrowIfNull(dn);

var parts = dn.StringRepresentation

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

лучше dn.Components

userIdentity.Identity,
searchBase);

if (context.LdapConfiguration!.IsGlobalCatalog())

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Наверно всё таки этим должна инфра заниматься
application должно быть без разницы GC или Domain

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants