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

Compare with Current View Page History

« Previous Version 10 Next »

Introductie

SURFconext can gebruik maken van groups informatie van uw instelling. Om dit mogelijk te maken kunt u bij uw instelling een 'Group Provider' opzetten welke door SURFconext (en alleen SURFconext) gebruikt kan worden.

Een 'Group Provider' is een REST service welke op basis van basic authentication informatie verstrekt gebruik makend van het VOOT2 protocol.

Deze pagina beschrijft hoe een Microsoft Active Directory gebruikt kan worden als Groups 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:

  1. Installeer een server met IIS (Internet Information Service)
  2. Maak een .NET project op basis van het WCF Service Application, met daarin een REST Service
  3. Zorgt dat het .NET project antwoord nav 2 typen REST calls
  4. Deploy het .NET project in IIS
  5. Beveilig ISS oa dmv Basic Authentication 

De calls gestuurd naar uw 'Group Provider' komen van de SURFconext groeps-omgeving voot.surfconext.nl en zijn:

RequestResultaat
"user/" + UID + "/groups"Geef alle groepen van gebruiker met sAMAccountName UID
"user/" + UID + "/groups/" + GROUP_IDGeef groepsinformatie van groep GROUP_ID als gebruiker met sAMAccountName UID lid is van deze groep.

Installeer IIS

Bij het installeren van IIS voor de 'Group Provider' kan gebruikt gemaakt worden van de standaard IIS installatie/rol.

Aandachtspunten zijn:

  • De IIS server zal via LDAP (vanuit het .NET project) contact moeten kunnen leggen met uw Active Directory omgeving (Zonder ssl via poort 389, met SSL - LDAPS - poort 636)
  • De IIS server zal benaderd moeten kunnen worden vanaf de SURFconext groeps-omgeving (voot.surfconext.nl ; 145.100.191.192/26 & 2001:610:188:426::/64)

Maken .NET project

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

Pas .NET project aan voor VOOT2/Group Provider

De call welke door de groeps-omgeving van SURFconext naar uw 'Group Provider' wordt gestuurd is: /groups/{groupid}/{userid}

Hierbij is {groupid} de volledige naam van de group 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;
        }

 

De VOOT2 JSon uitvoer voorbeelden voor de calls is

  • Geen group gevonden = lege JSon:
[]
  • 1 groep gevonden:
{
  "id": "id1",
  "displayName": "display name 1",
  "membership": {
    "basic": "member"
  },
  "description": "description...1"
}


  • meerdere groepen gevonden:
[
  {
    "id": "id1",
    "displayName": "display name 1",
    "membership": {
      "basic": "member"
    },
    "description": "description...1"
  },
  {
    "id": "id2",
    "displayName": "display name 2",
    "membership": {
      "basic": "member"
    },
    "description": "description...2"
  }
]

 

Toevoegen .NET project aan IIS

Na het maken van het .NET project kan deze toegevoegd worden 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

Configuratie Basic Authentication + beperking toegang op basis van IP-adressen

De nieuwe Group Provider dient te worden geconfigureerd in de SURFconext Groep omgeving. Om te zorgen dat allen de SURFconext groeps omgeving met deze dienst kan communiceren wordt gebruik gemaakt van Basic Authentication in ISS en een restrictie van de servers welke contact mogen leggen vanaf bepaalde IP-adressen.

 

Basic Authentication

 

Voer de volgende stappen uit om Basic Authentication aan te zetten op de Web Site van de Groep Provider:

  1. Open IIS manager en ga naar de Website.
  2. Open de 'Features View' en dubbelklik op Authentication
  3. Op de Authentication pagina selecteer 'Basic Authentication'
  4. In het Actions paneel selecteer Enable om de Basic Authentication te gebruiken met de standaard instellingen
  5. Disable alle andere authenticatie methoden.
  6. Klik met rechts op Basic Authentication en selecteer Edit.
  7. Geeft het standaard Active Directory Domein aan in het veld Domein. Er hoeft geen realm geconfigureerd te worden.
  8. Klik op OK
  9. Pas de permissies aan voor de website, zodat alleen een gespecificeerde gebruiker toegang heeft tot de website.
  10. Geef de naam en het wachtwoord van deze gebruiker door aan SURFconext (via support@surfconext.nl

Basic Authentication wordt niet standaard mee 'geinstalleerd' in de Server Rol 'Webserver (IIS)'. Deze feature dient eerst aan de rol toegevoegd worden.

  1. Pas de rol 'Web Server (IIS)' aan en enable de feature: Web Server - Security - Basic Authentication'.

IP Adres restrictie

 

 

  • No labels