OIOSAML.NET og Umbraco ved Thomas Ravnholt ravnholt @ silverbullet.dk
Silverbullet A/S Silverbullet, stiftet 2003 IT- rådgivning, projektledelse og implementering Officiel SKI-leverandør Kontorer i Århus og København Thomas Ravnholt I Silverbullet siden firmaets start Tidligere i bl.a. Trapeze, TDC, Mobilethink Kodekarl og teknisk projektleder TR 2
Agenda Umbraco og OIOSAML.NET Udfordringer Realisering Konklusion og spørgsmål TR 3
www.umbraco.org The friendly CMS - ”Our moms can use it” Dansk inititativ Mere 55.000 installationer Web-admin-brugergrænseflade Kodet i .NET Nem at udvide (.NET User Controls, XLST m.m.) - OIOSAML kræver vist ingen introduktion TR 4 4
Mål Autentifikation på Umbraco-site via OIOSAML Autorisation af brugere via OIOSAML Skal kunne kobles på et eksisterende site! Eksistrende site dvs. vi har allerede en flok brugere med brugernavne og med roller TR 5 5
Login scenarie Umbraco site Identity Provider Login Startside Vælg cert Brugeren vælger login Dirigeres til IdP’en og logger ind Sendes tilbage til Umbraco-sitet Min startside TR 6 6
Udfordringer Brugermapning fra OIOSAML til Umbraco/SP Undgå SPAM af Umbraco user-DB Håndtering af ukendte Umbraco-brugere Ingen kontrol over roller fra IdP Sikkerhedsmodel i Umbraco var ændret for nyligt Mapning - OIOSAML-bruger med Umbraco-bruger Umbraco-roller med OIOSAML-xxx Skal fungere for et eksisterende Umbraco-site med masser af bruger SPAM af user-DB Potentielt flere 100.000 brugere - Bevare en lille Umbraco user database Identity Provider (eller IdP) kan have egen rollemodel Umbraco dok - ingen dokumentation, ingen google, kun source code TR 7 7
ASP .NET model ASP .NET 2.0 Membership Abstraktion over brugere og roller Bl.a. API til at logge brugere ind og holde styr på bruger sessioner Anvender MembershipProvider og RoleProvider Custom impl. mulig Mapning - OIOSAML-bruger med Umbraco-bruger Umbraco-roller med OIOSAML-xxx Skal fungere for et eksisterende Umbraco-site med masser af bruger SPAM af user-DB Potentielt flere 100.000 brugere - Bevare en lille Umbraco user database Identity Provider (eller IdP) kan have egen rollemodel Umbraco dok - ingen dokumentation, ingen google, kun source code TR 8 8
Identitetsmapning OIOSAML/IdP Umbraco Hvilken nøgle er bedst Leverer brugeridentiteten (navn, email m.m.) Umbraco Har Members (navn, email) Hvilken nøgle er bedst Ingen fælles unik super ID Ingen fælles User id Cert-email -> Umbraco Member-email Member modellerer en slutbruger IdP navngivning og Umbraco navngivning er oprettet uafhængigt af hinanden Ingen cert-information i Umbraco der evt. kunne bruges TR 9 9
Rollemapning Umbraco har Member Groups OIOSAML (IdP’en) har attributter fra LDAP eller lignende Specifik SAML-attribut mappes til Member Group OIOSAML leverer ikke ekstra attributter når der autentificeres – Query nødvendig Member group modellerer et tilhørsforhold TR 10 10
Autentifikation + autorisation Custom .NET Membership and Role Provider Umbraco Site OIOSAML Velkommen side Membership Provider IdP Vælg cert Email m.m. Membership Provider Attributnavn IdP Attr Query Role Provider Min startside Role Provider Rolle TR 11
Brugere og roller - resume User mapning (autentifikation) email identificerer Umbraco-bruger findes brugeren ikke, oprettes en midlertidig ikke-persisteret bruger findes brugeren, benyttes den eksisterende bruger Rolletildeling (autorisation) En OIOSAML-autentificeret bruger får altid adgang (rollen definerer ”til hvor meget”) Er der ingen roller defineret i IdP gives default Member Group TR 12
Implementering af løsning Custom ASP .NET MembershipProvider Custom ASP .NET RoleProvider Konfiguration i web.config 3 sample User Controls Vis SAML-brugerattributter Vis Umbraco User-attributter Vis Umbraco Member Group TR 13 13
web.config Umbraco .NET providers <roleManager enabled="true" defaultProvider="SamlRoleProvider">…. <membership defaultProvider="SamlMembershipProvider“ >…… Default Member Group <setting name="DefaultMemberGroup" serializeAs="String“> <value>Partner</value> </setting> IdP rolleattribut <setting name="SamlRole" serializeAs="String“> <value>urn:oid:2.5.4.5</value> </setting> Konfigurering sker via web-config Umbraco RoleProvider og MembershipProvider er konfigureret via Umbraco Erstattes af SamlRoleProvider og SamlMembershipProvider Den MemberGroup/Rolle brugere default skal have defineres Den attribut i SAML-tokenet der skal anvedes til rollemapning er angivet TR 14 14
RoleProvider public class SamlRoleProvider : UmbracoRoleProvider { public override string[] GetRolesForUser(string username) { var sa = new string[] { IdPSamlUtilLib.Properties.Settings.Default.DefaultMemberGroup }; if (!(Helper.IsSamlSession && Helper.SessionUserName.ToLower() == username.ToLower())) { sa = base.GetRolesForUser(username); } else { var v = Helper.QueryAttributeValue (IdPSamlUtilLib.Properties.Settings.Default.SamlRole); if (!string.IsNullOrEmpty(v)) { sa = new string[] { v }; } return sa; TR 15
Hent SAML-attributter class Helper { const string emailalias = "urn:oid:0.9.2342.19200300.100.1.3”; public static string GetEmailFromSaml() { return GetAttributeValue(emailalias); } public static string GetAttributeValue(string samlid) { if (!IsSamlSession) return ""; var principal = SamlPrincipal.Identity as dk.nita.saml20.identity.Saml20Identity; string val = null; if (principal != null) { val = (from p1 in principal where p1.Name == samlid from a in p1.AttributeValue select a).FirstOrDefault(); return val; } …… TR 16
OIOSAML.NET - pros/cons Overvejende positiv oplevelse God API-dokumentation Let at integrere til Ting der kan forbedres Der returneres altid til en specifik side efter autentifikation Installationsvejledning baseret på SP-samples TR 17
Softwarebørsen Download fra http://www.softwareborsen.dk/projekter/software center/brugerstyring/saml-2-0-i-umbraco Koden viser bl.a. hvordan MembershipProvider og RoleProvider kan implementeres OIOSAML-attributter hives ud af sessionen Der laves attribut-queries mod Idp’en OIOSAML-attributter dvs. f.eks email, common name osv fra certifikatet TR 18 18