Kategoriarkiv: ADFS

Installation af en ADFS Proxy server

Jeg har gennemsøgt nettet efter en guide til installation af en ADFS proxy server og jeg er endnu ikke lykkedes med at finde en der er komplet. Dette er så mit forsøg på at lave en guide der indeholder alle forudsætningerne for at installere en ADFS Proxy server.

Først en beskrivelse af mit miljø, da det kan være afgørende på et punkt. Jeg har et standard setup med en ADFS på et internt net og en proxy i en DMZ. Den interne Server benytter et certifikat fra mit eget PKI og den eksterne benytter (selvfølgelig) et certifikat fra en standard certifikat udbyder. Hvis man læser best practices for ADFS installationer, skulle dette være den helt rigtige og sikre måde at gøre det på.

En installation kræver følgende:

En windows server 2008 r2. Den behøver ikke være meldt ind i et domæne, men hvis det ønskes for nemmere administration af serveren, skal det være et andet domæne end det den interne ADFS server er meldt ind i.

ADFS v2 softwaren:
http://www.microsoft.com/en-us/download/details.aspx?id=10909

Update roll-up package 2.0:
http://support.microsoft.com/kb/2681584

Certifikater:
Rod CA for det certifikat der er benyttet på den interne ADFS server eller farm og det offentlige certifikat der skal benyttes på webserveren.

Trin for trin:

Installer ADFS softwaren

Installer certifikater i computerens CAPI store. (vejledning)

Installer certifikat på webserveren. (Vejledning)

Start Active Directory Federation Services Proxy Wizard. Når du kommer til establish trust delen, skal du være opmærksom på at brugeren der skal benyttes til at godkende med, er den bruger som ADFS servicen på den interne ADFS server benytter.

Dette er alt der skal til. Der hvor jeg mener der er afgørende mangler i de beskrivelser jeg har set online, er at ingen nævner Rod CA for certifikatet der er installeret på de interne ADFS servere og fejlbeskrivelsen der dukker op når det mangler, er ikke til at forstå.

ADFS fejlfinding

Jeg har brugt det meste af 2 dage på at finde en fejl i et ADFS system hvor enkelte brugere, ikke får lov at logge på systemer der ellers er federede med ADFS farmen.

Problem:

Når brugeren tilgår en side hos en federationspartner, bliver han som forventet sendt videre til ADFS serverens webside sts.domænenavn.dk. Men istedet for at blive logget på eller bedt om brugernavn/password, får han en 400 error.

Hurtigt tænkte jeg at dette kunne være et problem med brugerens token størrelse. Husk på at antallet af grupper en bruger er medlem af, øger størrelsen på det token han bruger til at opnå godkendelse med, når kerberos benyttes. Jeg talte hans grupper ved at bruge repadmin til at vise hans grupper.

repadmin /showobjmeta DCBrugerens DN” /nocache /linked >c:\temp\objectmeta.txt

Åbn objectmeta.txt i excel og så har du et overblik over hvor mange grupper han har. Dette burde kunne gøres i powershell med measure-object eller count, men jeg brugte en quick and dirty, da problemets omfang ikke tillod tid til at lege! ;)

Brugeren havde 400 grupper og alt efter hvilken type grupper det er kan hans token udemærket være ude over grænsen på 12KB som er standard i windows. Jeg øgede derfor MaxTokenSize på serverne og genstartede services, dette hjalp ikke. Her gjorde jeg noget dumt og troede at hans token ikke var en del af problemet.

Næste step var at undersøge om brugeren havde specielle settings vedr. kerberos delegation. Men heller ikke her var der noget at komme efter.

Jeg loggede også på med brugeren og tjekkede loggen på den DC han kom via og så at han benyttede kerberos mod andre systemer uden problemer.

Tjekkede at brugeren ikke havde nogle politikker enablet der kunne forårsage dette, ved at køre RSOP og tjekke network security settings, heller intet at se.

Til sidst benyttede jeg Microsoft Network monitor 3.4 til at se trafikken når brugeren loggede på. Umiddelbart var der intet at bemærke, men når han ramte webserveren kunne jeg se at han rent faktisk begyndte at overføre sit token, men at webserveren så til sidst smed ham af og meldte fejl 400. Altså nægter webserveren ham ikke at logge på men kan ikke modtage hele hans token.

Forvirringen i hele dette er at MaxTokenSize indstillingen giver os lov til at benytte tokens der er større end default og det burde vel have løst dette problem? NEJ for problemet er ikke kun størrelsen af tokenet der må benyttes. Problemet er derimod hvor stort et token der må overføres i request headeren til serverens http service. Husk på at tokenet bliver overført, base 64 encoded til http servicen i request headeren. Denne tillader også kun 12KB standard. Efter at have rettet MaxFieldLength og MaxRequestBytes, genstartet http servicen og startet alle de andre services igen manuelt, på alle serverne, virkede det!