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:
- ActiveDirectoryMembershipProvider
(.NET framework 2.0)
- 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" />
- connectionStringName är samma namn som du valde för din
tidigare tillagda connection string.
- 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
- activeDirectoryConnectionString är den connection string som vi
nyss lade till.
- 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).
- 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.

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.