Как преобразовать objectGuid Active Directory в читаемую строку?

Я использую Novell.Directory.Ldap в мобильном приложении Xamarin, написанном 9X_ldap на C#.

Используя Novell, я могу аутентифицировать 9X_ldap пользователя на основе домена, имени пользователя 9X_active-directory и пароля, используя

LdapConnection.bind(username, password); 

Затем я выполняю поиск, используя 9X_active-directory-group sAMAccountName, который эквивалентен указанному имени 9X_active-directory пользователя.

После всего этого, что работает 9X_encoding успешно, мне нужно получить пользовательский 9X_active-directory-group objectGuid, чтобы я мог запрашивать внешние базы данных, которые 9X_mobile используют этот идентификатор в качестве 9X_mobile ключа. Проблема в том, что когда я получаю 9X_encodings руководство обратно из LdapSearchResults, оно каким-то образом 9X_active-directory-group закодировано. И я не могу понять, как получить 9X_xamarin читаемое строковое представление этого руководства.

У 9X_mobile кого-нибудь есть дополнительная информация 9X_ldap по этому поводу? Я бы предположил, что гид 9X_xamarin как-то закодирован, но как он закодирован, я 9X_encodings не знаю. Я пробовал

System.Convert.FromBase64String 

и это не помогло. Я ценю 9X_xamarin помощь, ребята, дайте мне знать, если я 9X_encoding могу опубликовать дополнительную информацию, которая 9X_encoding была бы полезна.

private void Login() { if (LOG.isInfoEnabled()) { LOG.info("Attempting LDAP logon . . ."); if (LOG.isDebugEnabled()) { LOG.debug("Host: " + this.ldapHost); LOG.debug("Port: " + this.ldapPort); LOG.debug("SearchBase: " + this.ldapSearchBase); } } LdapConnection conn = new LdapConnection(); try { conn.Connect(this.ldapHost, this.ldapPort); if (LOG.isDebugEnabled()) { LOG.debug("connected?: " + conn.Connected.ToString()); } } catch (Exception e) { LOG.error("An exception occurred while attempting to connect to AD server!", e); // INFORM USER ABOUT ERROR authError(Resource.String.error_unknown); } if (!string.IsNullOrEmpty(this.editTextUserName.Text) && !string.IsNullOrEmpty(this.editTextPassword.Text)) { // HIDE KEYBOARD var imm = (InputMethodManager)GetSystemService(Context.InputMethodService); imm.HideSoftInputFromWindow(editTextPassword.WindowToken, HideSoftInputFlags.NotAlways); // HIDE 'LOGON' BUTTON WHILE LOGGING ON this.buttonLogin.Visibility = ViewStates.Invisible; try { // PERFORM AUTHENTICATION conn.Bind(this.userName, this.userPassword); if (LOG.isDebugEnabled()) { LOG.debug("conn.Bound?: " + conn.Bound); } if (conn.Bound) { if (LOG.isDebugEnabled()) { LOG.debug("authentication successful"); } string[] name = this.userName.Split('\\'); LOG.debug("name[0]: " + name[0]); LOG.debug("name[1]: " + name[1]); string filter = "(sAMAccountName=" + name[1] + ")"; string guid = ""; LdapSearchResults searchResults = conn.Search( this.ldapSearchBase, // search base LdapConnection.SCOPE_SUB, // search scope filter, // filter null, // attributes false); // attributes only while (searchResults.hasMore()) { LdapEntry nextEntry = null; try { nextEntry = searchResults.next(); guid = nextEntry.getAttribute("objectGUID").StringValue; } catch (LdapException e) { LOG.error("An exception occurred while attempting to get next search result!", e); continue; } } Intent intent = new Intent(this, typeof(DashboardActivity)); intent.PutExtra("guid", guid); StartActivity(intent); } else { // INFORM USER ABOUT ERROR authError(Resource.String.error_auth); } } catch (LdapException ldape) { LOG.error("An exception occurred while attempting to authenticate user credentials!", ldape); // INFORM USER ABOUT ERROR authError(Resource.String.error_auth); } finally { conn.Disconnect(); } } else { conn.Disconnect(); } } 

8
0
3
Общее количество ответов: 3

Ответ #1

Ответ на вопрос: Как преобразовать objectGuid Active Directory в читаемую строку?

Я не уверен, что библиотека Novell кодирует 9X_active-directory его каким-либо другим способом, но System.DirectoryServices 9X_encoding предоставляет GUID в виде массива байтов. Вы 9X_mobile можете преобразовать это в читаемую строку 9X_encodings с помощью структуры System.Guid:

new Guid((System.Byte[])this.GUID).ToString() 

15
0

Ответ #2

Ответ на вопрос: Как преобразовать objectGuid Active Directory в читаемую строку?

ObjectGUID - это двоичная строка (или строка октетов), поэтому 9X_mobile при попытке отобразить значение вы, вероятно, видите 9X_encodings случайные бессмысленные символы.

ObjectGUID фактически 9X_xamarin соответствует устоявшемуся стандарту - это 9X_xamarin UUID version 4. Поскольку я не работаю с C#, я не могу предоставить 9X_xamarin рабочий пример, но с этой информацией вы 9X_xamarin сможете декодировать двоичную строку в читаемое 9X_encodings строковое представление или, по крайней 9X_encodings мере, найти рабочий пример кода. У меня 9X_active-directory-group есть сильное подозрение, что будет какой-то 9X_encodings собственный класс или библиотека для работы 9X_mobile с UUID / Guid в C#.

Если вы не против прочитать 9X_encodings пример php, взгляните на my implementation преобразования 9X_xamarin в php.

Вот рассматриваемая функция. Он ожидает, что 9X_active-directory-group $ guid в исходной двоичной форме будет возвращен 9X_mobile сервером.

function _to_p_guid( $guid ) { $hex_guid = unpack( "H*hex", $guid ); $hex = $hex_guid["hex"]; $hex1 = substr( $hex, -26, 2 ) . substr( $hex, -28, 2 ) . substr( $hex, -30, 2 ) . substr( $hex, -32, 2 ); $hex2 = substr( $hex, -22, 2 ) . substr( $hex, -24, 2 ); $hex3 = substr( $hex, -18, 2 ) . substr( $hex, -20, 2 ); $hex4 = substr( $hex, -16, 4 ); $hex5 = substr( $hex, -12, 12 ); $guid = $hex1 . "-" . $hex2 . "-" . $hex3 . "-" . $hex4 . "-" . $hex5; return $guid; } 

8
1

  • Я обновил ссылку (недавно я немного перем ...

Ответ #3

Ответ на вопрос: Как преобразовать objectGuid Active Directory в читаемую строку?

В библиотеке Novell objectGUID - это массив SByte, который 9X_xamarin необходимо преобразовать в массив Byte перед 9X_active-directory преобразованием в GUID. Вам также необходимо 9X_encodings получить ByteValue из objectGUID, а не StringValue.

try { nextEntry = searchResults.next(); guid = new Guid((Byte[])(Array)nextEntry.getAttribute("objectGUID").ByteValue); } catch (LdapException e) { LOG.error("An exception occurred while attempting to get next search result!", e); continue; } 

2
0