Active Directory (AD/LDAP) för Umbraco medlemmar

den 16 oktober 2009 av Fredrik Sewen

Det här är en guide i hur man kopplar Umbracos medlemmar (Members) till ett Active Directory. Vi kommer använda oss av:

  1. ActiveDirectoryMembershipProvider (.NET framework 2.0)
  2. ADRoleProvider (DanielPS.Roles.ADRoleProvider)

För att kunna följa med i guiden bör du ha en installation av Umbraco 4 samt en Active Directory som du kan jobba mot.

Bakgrund

Jag är ingen Active Directory (AD/LDAP) expert. Men en kund efterfrågade här i dagarna en koppling mellan företagets Active Directory och ett Umbraco intranät. Eftersom jag aldrig gjort en sådan koppling förut fick man ge sig ut på en google-raid.

Det var svårt att hitta bra information om Umbraco och Active Directory. På our.umbraco.org fanns en Wiki-artikel, men den inriktar sig mer på hur man får Active Directory att fungera med User-delen. Här är en sammanfattning av vad jag kommit fram till för att få Active Directory att lira med Umbraco medlemmar och grupper.

Web.config

I stort sett all magi med Umbraco och Active Directory sker i web.config.

Active Directory Membership provider

Börja med att lägga till en connectionstring till ditt LDAP där du har dina användare (Default CN=Users):

<connectionStrings> <add name="ADConnectionString" ConnectionString="LDAP://my.server.org/CN=Users,DC=my,DC=server,DC=org"/> </connectionStrings>

Om du inte redan har taggen <connectionStrings> så ska den placeras under <configuration>-taggen (jag placerade den under </appSettings>)

Leta sedan upp <membership>-taggen. Där ska du lägga till en ny provider:

<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnectionString" connectionUsername="<DOMAIN>\<USERNAME>" connectionPassword="<PASSWORD>" attributeMapUsername="sAMAccountName" />

  1. connectionStringName är samma namn som du valde för din tidigare tillagda connection string.
  2. connectionUsername och connectionPassword är uppgifter till den medlem i ditt Active Directory som du ska använda dig för att autentisera resterande medlemmar.

OBS! Missa inte attributeMapUsername="sAMAccountName".

I <membership>-taggen byt värdet för defaultProvider till din tillagda provider.

<membership defaultProvider="ADMembershipProvider" userIsOnlineTimeWindow="15">

Det här är allt som behövs för att få dina medlemmar från ett Active Directory att kunna logga in till Umbraco.

Om du får problem när du loggar in, var noga med att kolla serverns error-loggar. Vanligtvis har fel här med felaktiga användarnamn eller en felaktig connection string att göra.

OBS! Umbracos inbyggda Medlems-sektion kommer inte fungera för att administrera medlemmar. Alla administration av medlemmar när man använder Active Directory måste (sanning med modifikation) ske i Active Directory.

Active Directory Role Provider

Ofta är anledningen till att man har medlemmar så att man kan begränsa ett visst innehåll på sajten till vissa medlemmar. I Umbraco begränsas innehåll med hjälp av grupper. Det är en Role provider som förser Umbraco med grupper.

För att kunna koppla grupperna till medlemmarna i ett Active Directory måste man hämta grupper från Active Directory. Att tilldela medlem till en grupp sker sedan i Active Directory, medan själva tilldelningen av vilket innehåll en grupp får se sker i Umbraco

Microsoft har ingen inbyggd role provider för Active Directory grupper. Det finns flera sätt att åstadkomma det här på. Nedan kommer jag beskriva ett sätt som använder sig av en Custom Role provider, ADRoleProvider från CodeProject.

Så, till sak. Precis som för membership providern börjar vi med att lägga till en connection string.

<add name="ADRoleConnectionString" connectionString="LDAP://DC=my,DC=server,DC=org" />

OBS! En begränsning med ADRoleProvider är att ditt Active Directory måste finnas inom samma domän som din anropande site. För mig var det inget problem eftersom Active Directory befinner sig på samma dator som min sajt.

Sen letar vi upp <roleManager>-taggen och lägger till en ny provider

<add applicationName="ApplicationName" name="ADRoleProvider" type="DanielPS.Roles.ADRoleProvider" activeDirectoryConnectionString="ADRoleConnectionString" groupMode="Additive" groupsToUse="Ekonomi" groupsToIgnore="" usersToIgnore="" />

där

  1. activeDirectoryConnectionString är den connection string som vi nyss lade till.
  2. groupMode är antingen Additive (visar alla roller som listas i groupsToUse) eller Subtractive (visar per default alla grupper i Active Directory, minus de som listas i groupsToIgnore).
  3. groupsToUse / groupsToIgnore är en kommaseparerad lista på grupper i ditt Active Directory som du antingen vill använda, eller ignorera.

Det finns fler inställningar, bland annat kan du cacha rollerna lokalt. Läs mer på CodeProject.

Slutsats

Nu om du går in i ditt Umbraco-admin kommer du att finna dina roller när du klickar på Public Access och Role-based protection.

ActiveDirectoryRoles

Som jag sa tidigare så kommer all administartion av medlemmar och grupper att ske i ditt Active Directory. Det är där du lägger till nya, tar bort och gör användare till medlemmar av dina grupper.

blog comments powered by Disqus

Kategori

Senaste kommentarer

Powered by Disqus

Prenumerera

Rss