Deze pagina beschrijft hoe je Microsoft Active Directory (AD) als 'Group Provider' kunt inrichten. Hierdoor kan groepsinformatie rechtstreeks vanuit de AD via SURFconext naar bepaalde Service Providers worden doorgestuurd.
Een 'Group Provider' is een REST-service die op basis van basic authentication informatie verstrekt middels het VOOT-protocol.
Deze pagina beschrijft hoe een Microsoft Active Directory gebruikt kan worden als 'Group Provider', maar bevat geen compleet voorbeeld. Kennis van Visual Studio en C# is vereist om de benoemde stappen volledig door te lopen. |
Een simpele manier om een 'Group Provider' op te zetten is:
De calls gestuurd naar uw 'Group Provider' komen van de SURFconext groeps-omgeving voot.surfconext.nl en zijn:
Request | Resultaat |
---|---|
"user/" + UID + "/groups" | Geef alle groepen van gebruiker met sAMAccountName UID |
"user/" + UID + "/groups/" + GROUP_ID | Geef groepsinformatie van groep GROUP_ID als gebruiker met sAMAccountName UID lid is van deze groep. |
Bij het installeren van IIS voor de 'Group Provider' kan gebruik gemaakt worden van de standaard IIS installatie/rol.
Aandachtspunten zijn:
145.100.191.192/26
& 2001:610:188:426::/64).
Creëer een nieuw .NET project met daarin een RESTfull Service. Een voorbeeld is te vinden op: http://www.topwcftutorials.net/2013/09/simple-steps-for-restful-service.html.
De call die door de groepenomgeving van SURFconext naar uw 'Group Provider' wordt gestuurd is: /groups/{groupid}/{userid}
.
Hierbij is {groupid}
de volledige identifier van de groep zoals bijvoorbeeld: urn:collab:group:example.org:nl:surfnet:diensten:groupname1
{userid}
is de UID van de gebruiker, zoals: urn:collab:person:example.org:user1
Door het OperationContract in het .NET project aan te passen is het mogelijk de waarden van uit de call (in de URI/URL) te gebruiken binnen het project:
[OperationContract] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "user/{userid}/group/{groupid}")] |
Door middel van LDAP is het nu mogelijk om te kijken om gebruiker met {userid}
lid is van een groep met de naam {groupid}
. Om verbinding te maken met de LDAP-server heb je de component LDAP library for C#.NET nodig.
Er kan gebruik gemaakt worden van de volgende code om in Active Directory to zoeken of een gebruiker lid is van een bepaalde groep. Let op dat deze code niet compleet is en aanpassingen behoeft mbt. AD-domein en groups-locatie in de AD.
public static List<string> GetUserGroupDetails(string userName) { DirectoryEntry entry = new DirectoryEntry("LDAP://CN=users,DC=fabrikam,DC=com"); DirectorySearcher search = new DirectorySearcher(entry); List<string> groupsList = new List<string>(); search.Filter = String.Format("(cn={0})", userName); search.PropertiesToLoad.Add("memberOf"); SearchResult result = search.FindOne(); if (result != null) { int groupCount = result.Properties["memberOf"].Count; for (int counter = 0; counter < groupCount; counter++) { string s = (string)result.Properties["memberOf"][counter]; groupsList.Add(s); // _log.DebugFormat("found group for user {0} : {1}", userName, s); } } else { _log.Warn("no groups found for user " + userName); } return groupsList; } |
Voorbeelden van de VOOT2-JSON uitvoer zien er zo uit:
[] |
{ "id": "id1", "displayName": "display name 1", "membership": { "basic": "member" }, "description": "description...1" } |
[ { "id": "id1", "displayName": "display name 1", "membership": { "basic": "member" }, "description": "description...1" }, { "id": "id2", "displayName": "display name 2", "membership": { "basic": "member" }, "description": "description...2" } ] |
Na het maken van het .NET project kan deze worden toegevoegd aan de IIS-webserver. Zie hiervoor de stappen zoals beschreven in: http://www.iis.net/learn/application-frameworks/scenario-build-an-aspnet-website-on-iis/configuring-step-1-install-iis-and-asp-net-modules#12.
De nieuwe 'Group Provider' dient te worden geconfigureerd in de SURFconext groepenomgeving. Om te zorgen dat alleen SURFconext met deze dienst kan communiceren (eventuele Service Providers communiceren altijd via het SURFconext-platform) wordt gebruik gemaakt van Basic Authentication in IIS en een restrictie van de servers die contact mogen leggen vanaf bepaalde IP-adressen.
Voer de volgende stappen uit om Basic Authentication aan te zetten op de web site van de 'Group Provider':
Geef de naam en het wachtwoord van deze gebruiker door aan SURFconext (via support@surfconext.nl)
Basic Authentication wordt niet standaard mee 'geïnstalleerd' in de Server Rol 'Webserver (IIS)'. Deze feature dient eerst aan de rol toegevoegd worden Pas de rol 'Web Server (IIS)' aan en enable de feature: Web Server - Security - Basic Authentication. |
Om te zorgen dat alleen de SURFconext groepenomgeving verbinding mag maken met de website voer de volgende stappen uit:
'IP and Domain Restrictions' wordt niet standaard mee 'geinstalleerd' in de Server Rol 'Webserver (IIS)'. Deze feature dient eerst aan de rol toegevoegd worden Pas de rol 'Web Server (IIS)' aan en enable de feature: Web Server - Security - IP and Domain Restrictions. |