You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

Introductie

Met de kennis van het VOOT-protocol in het achterhoofd heeft SURFnet een simpele webdienst geïmplementeerd om toegang te krijgen tot Microsoft Active Directory (AD) als Group Provider. SURFnet gebruikt hiervoor het LDAP-protocol. Voor de ontwikkeling van dit protocol is Microsoft Visual Studio 2010 gebruikt. Het project is gebaseerd op het 'WCF REST Services Project Template'.

Om verbinding te maken met de LDAP-server heb je de component LDAP library for C#.NET nodig. De AD-server wordt opgezet met de standaardconfiguratie, die de mappen 'Builtin' en 'Users' bevat.

Op dit moment ondersteunt deze tutorial alleen bepaalde delen van het VOOT-protocol.

Methoden

De onderstaande methoden worden op dit moment ondersteund:

  • toon mijn eigen groepen - HTTP GET naar '/groups/@me'
  • toon alle deelnemers van een van mijn eigen groepen - HTTP GET naar '/people/@me/[groep-id]'

  • toon een bepaald persoon - HTTP GET naar '/people/[gebruiker-id]'

De code voor deze methoden is als volgt:

    public class VootService
    {
        private readonly IVootReader reader;

        public VootService()
        {
            reader = new LdapVootReader(new ConfigurationHelper());
        }

        [WebGet(UriTemplate = "groups/@me")]
        public string IsMemberOf()
        {
            return reader.IsMemberOf(currentUser);
        }

        [WebGet(UriTemplate = "people/{userId}")]
        public string GetMember(string userId)
        {
            return reader.GetMember(userId);
        }

        [WebGet(UriTemplate = "people/@me/{groupId}")]
        public string GetGroupMembers(string groupId)
        {
            return reader.GetGroupMembers(groupId);
        }
    }

Alle resultaten worden geretourneerd in JSON-formaat.

Toon mijn eigen groepen

De 'VootReader'-klasse bevat de methode 'isMemberOf(userId)'. Deze retourneert alle groepen waar de gebruiker lid van is. De LDAP-bron wordt doorzocht vanuit 'CN=Users, DN=demo, ..., DN=nl' met het filter 'samAccountName='[gebruiker-id]'.

Het attribuut 'memberOf' retourneert een 'array' met alle groepen waar de gebruiker lid van is. Dat kan er bijvoorbeeld zo uitzien:

{

"CN=TestGroup,CN=Users,DC=demo,DC=..,DC=..,DC=surfnet,DC=nl",

"CN=DemoGroup,CN=Users,DC=demo,DC=..,DC=..,DC=surfnet,DC=nl",

"CN=Administrators,CN=Builtin,DC=demo,DC=..,DC=..,DC=surfnet,DC=nl"

}

Alle elementen uit de 'array' worden verwerkt door het verkrijgen van de enige 'LDAP-'entry' die gelijk is aan de eerste 'common name' (CN).

Toon alle leden van 1 van mijn groepen

De methode 'GetGroupMembers' retourneert alle leden van de opgegeven groep. De LDAP-zoektermen zijn gelijk aan de vorige methode, omdat in dit geval de groepen onderdeel zijn van de 'Users'-map. Maak gebruik van 'groupId' als deel van het filter.

Opnieuw wordt het resultaat geretourneerd als een 'array', maar ditmaal als waarde van het 'member'-attribuut.

Toon een bepaald persoon

De methode 'GetMember' retourneert de gegevens van de desbetreffende gebruiker. Het belangrijkste onderdeel van de methode is:

// Get the entry.
LdapEntry entry = GetEntry(id, configHelper.PeopleDn);

// Process the result.
if (entry != null)
{
    LdapAttribute attr = entry.getAttribute("displayName");
    if (attr != null)
    {
        result = new Person { DisplayName = attr.StringValue, Id = id };
    }
}

Authenticatie

Voor het authenticeren van het eindpunt van de gebruiker gebruiken we '3-legged OAuth versie 1.0a'. Om Single Sign On mogelijk te maken tussen de Service Provider, SURFconext en het externegroepen-eindpunt, moet je de OAuth Provider (deze is verantwoordelijk voor het aanmaken en uitdelen van toegangs-'tokens' na een succesvolle authenticatie) koppelen met SURFconext.

Hiervoor zijn verschillende.NET-componenten beschikbaar. SURFconext maakt gebruik van het component DotNetOpenAuth. Een voorbeeld hiervan is een 'OpenAuthServiceProvider'. Dit voorbeeld hebben we als basis gebruikt voor de OAuth/implementatie. Het bevat een ASP.NET handler door de 3-legged OAuth handshake. Vervolgens wordt er een VOOT-webservice aan toegevoegd. Met een aparte webapplicatie kun je de functionaliteit van de implementatie testen.

Todo

  • Voeg extra VOOT-parameters toe: count, filterBy, filterOp, filterValue, sortOrder, startIndex.
  • Voeg de code toe aan de GitHub directory
  • No labels