De WSO2 Identity Server (IS) ondersteunt verschillende authenticatieprotocollen zoals SAML2, OpenID en WS-Federation Passive om verschillende applicaties van dienstverleners naadloos te integreren volgens geldende standaarden. Op het moment dat dienstverleners geïntegreerd zijn met WSO2 IS, zal gebruikersauthenticatie afgehandeld worden door WSO2 IS.
Ook al is het inloggen gecentraliseerd, dienstverleners zouden de vereiste kunnen hebben om toegang voor bepaalde gebruikers toe te staan of te weigeren door het toepassen van bepaalde autorisatieregels. Een applicatie van een HR-dienstverlener geeft bijvoorbeeld alleen gebruikers met een HR rol toegang tot de applicatie en moet andere gebruikers weigeren.
De XACML eigenschap in de WSO2 IS dwingt verschillende soorten autorisatie af tijdens het inlogproces. In deze blogpost wordt uitgelegd hoe de WSO2 IS geconfigureerd moet worden om rolgebaseerde autorisatie met XACML te verplichten wanneer een gebruiker probeert in te loggen bij een dienstverlener.
PICKUP DISPATCH is een webapplicatie die geconfigureerd is om de WSO2 IS voor gebruikersauthenticatie te gebruiken. De Identity Server heeft twee verschillende type gebruikers: Manager en Staff. Een gebruiker die Manager is, krijgt de managerrol toegewezen en Staff gebruikers krijgen de staffrol toegewezen. Toegang tot de webapplicatie moet alleen worden toegestaan aan de managers en moet beperkt worden voor de staff gebruikers.
Om het voorbeeld in deze WSO2 Tutorial uit te voeren moet je systeem aan de volgende eisen voldoen:
- WSO2 Identity Server 5.10.0
- Apache Tomcat 0.29
- Voorbeeld van de webapplicatie: pickup-war
Stap 1: Dienstverlener configureren
- Configureer de dienstverlener voor de pickup-dispatch applicatie. Ga naar Service Providers > Klik op ‘Add’ > Selecteer ‘Manual Configuration Mode’ > Registreer een dienstverlener die “pickup-dispatch” heet.
- Klap ‘Inbound Authentication Configuration’ uit > OAuth/OpenID Connect Configuration > Configure
- Registreer de call-back URL als http://localhost.com:8080/pickup-dispatch/oauth2client en klik op ‘Add’..
- Schrijf de OauthClientKey en OauthClientSecret van de dienstverlener op om die later te kunnen gebruiken.
- Klap ‘Local & Outbound Authentication Configuration’ uit > Selecteer het vakje ‘Enable Authorization’
- Klik op ‘Update’ om de configuratie van de dienstverlener op te slaan.
Stap 2: XACML Policy configureren
- Open ‘Entitlement’ > Policy Administration > authn_role_based_policy_template
- Dit sjabloon is ontworpen voor autorisatie op basis van de rol van de gebruiker in het authenticatieproces.
- Sjabloon configureren:
- Vervang de policy id met een unieke naam g“pickup-dispatch-role-based-access”
- Vervang SP_Name met de naam van de dienstverlener “pickup-dispatch”
- Vervang ROLE_1 met rol “manager” (in dit voorbeeld heeft alleen een gebruiker met de rol manager toegang tot de app van de dienstverlener)
- Verwijder het ROLE_2 gedeelte (in dit voorbeeld wordt maar één rol gebruikt, maar door het sjabloon uit te breiden kunnen meer rollen verwerkt worden)
- Sla de policy op met Publish to MyPDP
Stap 3: Gebruikers en rollen aanmaken
- Maak de rollen ‘manager’ en ‘staff’ aan. Klik op ‘Users and Roles’ > Add > Add New Role > Geef de rol een naam > Klik op ‘Next’ > Vink ‘Login’ aan onder ‘Select permissions for the Role’ > Klik op ‘Finish’
- Maak de gebruikers ‘manager’ en ‘staff’ aan en koppel de managerrol aan de manager en de staffrol aan staff. Ga naar ‘Users and Roles’ > Add > Add New User > Vul gebruikersnaam en wachtwoord in > Klik op ‘Next’ > Assign roles > Klik op ‘Finish’
Stap 4: Een voorbeeld webapp opzetten
- Pak de webapp pickup-war uit in apache-tomcat/webapps
- Open dispatch.properties in pickup-dispatch/WEB-INF/classes
- Vervang consumerKey en consumerSecret waardes met de OAuth client key en de OAuth client secret waarde van de eerder aangemaakte dienstverlener. Update de waarde van de ‘scope’ naar “openid internal_application_mgt_view”
- Start de tomcat server
Stap 5: Verifieer de login
- Voeg host mapping toe aan localhost.com in het etc/hosts bestand op: 127.0.0.1 localhost.com
- Ga naar de gehoste webapplicatie: http://localhost.com:8080/pickup-dispatch/index.jsp
- Log in als een staff-gebruiker die de staffrol toegewezen heeft gekregen. Het resultaat is een melding van een mislukte authenticatie omdat de autorisatie onjuist is.
- Log in als manager met de managerrol. Het resultaat is een geslaagde authenticatie via de gebruikersrolautorisatie.
Conclusie
WSO2 Identity Server biedt out-of-the-box ondersteuning voor het inzetten van XACML beleid in de authenticatieflow om autorisatievereisten af te dwingen. XACML kan niet alleen gebruikt worden om rolgebaseerde autorisatie af te dwingen, maar ook om andere nauwkeurige toegangscontrole te handhaven. Bijvoorbeeld het weigeren van toegang tot een dienstverlener binnen een zekere tijdsperiode of het toestaan van toegang tot een dienstverlener gebaseerd op de claim values van een gebruiker, enzovoort.
Als deze blog vragen oproept, aarzel dan niet om contact met ons op te nemen.