Tag-arkiv: fejlfinding

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!