Comment puis-je convertir un Active Directory objectGuid pour lisible une chaîne de caractères?
Je suis en utilisant Novell.Directory.Ldap
dans un Xamarin application mobile, écrit en C#.
À l'aide de Novell, je suis capable d'authentifier un utilisateur sur la base de domaine, nom d'utilisateur et mot de passe à l'aide de
LdapConnection.bind(username, password);
Puis-je effectuer une recherche, à l'aide de la sAMAccountName
, qui est l'équivalent pour le nom d'utilisateur fourni.
Après tout cela, qui fonctionne avec succès, j'ai besoin d'obtenir de l'utilisateur objectGuid
de sorte que je peux interroger des bases de données externes, ce guid comme une clé. Le problème c'est que quand je reçois le guid formulaire à retourner la LdapSearchResults
, il est encodé en quelque sorte. Et je ne peux pas comprendre comment obtenir l'lisible représentation de chaîne de ce guid.
Quelqu'un a plus d'informations à ce sujet? J'imagine que le guid est codé en quelque sorte, mais comment c'est codé, je ne sais pas. J'ai essayé
System.Convert.FromBase64String
et qui n'a pas aidé. J'apprécie l'aide les gars, laissez-moi savoir si je peux poster plus de l'information qui serait utile.
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();
}
}
OriginalL'auteur liltitus27 | 2013-08-22
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si Novell bibliothèque de code d'une autre façon, mais le Système.DirectoryServices fournit le GUID comme un tableau d'octets. Vous pouvez obtenir ce à un lisibles à la chaîne à l'aide du Système.Guid struct:
OriginalL'auteur frax
La ObjectGUID est une chaîne binaire ( ou octuor à cordes ), de sorte que vous assistons est un hasard absurde caractères lorsque vous essayez d'afficher la valeur.
La ObjectGUID en fait, suit un standard établi - c'est un L'UUID de la version 4.
Depuis que je ne travaille pas avec des C# je ne peux pas fournir de travail, par exemple, mais avec cette information, vous devriez être en mesure de décoder la chaîne binaire en lisible une représentation de chaîne ou au moins trouver un travail exemple de code. J'ai une forte suspicion qu'il y aura une certaine classe native ou une bibliothèque pour travailler avec des Uuid /Guid dans C#.
Si vous n'avez pas l'esprit en lisant un php, par exemple, prendre un coup d'oeil à ma mise en œuvre de la conversion en php.
Voici la fonction en question. Elle attend que le $guid dans sa première forme binaire tel qu'il est renvoyé à partir du serveur.
J'ai mis à jour le lien ( j'ai récemment déménagé le code source un peu autour de lui ) et a fourni l'exemple de code en question directement dans la réponse. Mes excuses!
OriginalL'auteur Robert Rossmann
Dans le Novell bibliothèque,
objectGUID
est unSByte
tableau, qui doit être lancé pour unByte
tableau, avant d'être converti enGUID
. Vous devez également obtenir l'ByteValue
deobjectGUID
, plutôt que de laStringValue
.OriginalL'auteur sfinks_29
Pour moi la solution a été d'instancier un GUID de la manière suivante:
OriginalL'auteur Taersious