Bruk av ADFS Claim Rules for gi tilgang til kun spesifikke enheter/browsere mot en applikasjon via ADFS. Nyttig dersom man vil hindre enkelte typer enheter tilgang til applikasjoner. For å lage ADFS Claim Rules kan det være fordel å også benytte regular expression slik at strengen kan fungere mot mange versjoner av samme enhet.

I enkelte tilfeller vil man kanskje ha behov for å begrense tilgang til kun gitte typer enheter i en ADFS føderert løsning. Dette er mulig ved å benytte Claim Rules. Det er mange muligheter for å begrense tilgang, men i denne bloggposten har jeg fokusert på User Agents for å begrense tilgang til en applikasjon. Man kan sette opp regler som godkjenner alle unntatt enkelte User Agents eller godta kun spesifikke User Agents. Som referanse kan jeg vise til følgende artikkel.

Dessverre har User Agent som iOS presenterer til ADFS endret seg og strengen må derfor tilpasses slik at det fungerer mot nyere enheter. I tillegg er det enkelte uklarheter om nøyaktig hvor og hvordan man gjør det i artikkelen over.

Tilpasning av Claim Rules slik at de fungerer med nyere enheter

Med utgangspunkt i følgende regel;

exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-user-agent", Value =~ "^Mozilla\/5.0 \((iPhone|iPad|iPod); (CPU|CPU iPhone) (?:OS\s*\d+_\d+(?:_\d+)?\s*)? like Mac OS X\) (?:AppleWebKit\/\d+(?:\.\d+(?:\.\d+)?|\s*\+)?\s*)? \(KHTML, like Gecko\) (?:Mobile\/\w+\s*)?$"])
 => issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");

Fant jeg ut at den ikke lenger fungerer. Første utfordring var derfor å avdekke hva iphones/pads presenterer nå til ADFS når de forsøker å logge på mot ADFS. Det må da utføres to ting:
 

1) Legge inn en deny all regel mot Relying Party slik at man kan logge mislykkede pålogginger. (se lenger ned for beskrivelse av etablering av Claim Rules)
 

2) Skru på Auditing på ADFS. Denne artikkelen beskriver dette greit: ADFS Auditing.
 

Videre må man sjekke loggen på ADFS server etter at man har forsøkt å logge på. Feilede pålogginger blir logget i security loggen. Jeg går ikke inn på selve event-meldingen her, men det mobilen min presenterte, og som var annerledes, var at det til slutt ble lagt til «OAuth MSAuthHost (xxxxx)». Jeg måtte derfor ty til Regular Expression (regex) for å tilpasse Claim Rule til å inneholde også dette. Se følgende artikkel for informasjon om hvordan regex fungerer. I tillegg skulle iPod fjernes som godtatt enhet.

Claim Rule ble til slutt som følger:

exists([Type == "http://schemas.microsoft.com/2012/01/requestcontext/claims/x-ms-client-user-agent", Value =~ "^Mozilla\/5.0 \((iPhone|iPad); (CPU|CPU iPhone) (?:OS\s*\d+_\d+(?:_\d+)?\s*)? like Mac OS X\) (?:AppleWebKit\/\d+(?:\.\d+(?:\.\d+)?|\s*\+)?\s*)? \(KHTML, like Gecko\) (?:Mobile\/\w+\s*) OAuth MSAuthHost \(\d+\)?$"])
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");

Konfigurasjon av Relying Party med Claim Rule

Start opp ADFS Management og bla til Relying Party Trusts. Høyreklikk den RPT hvor du skal begrense tilgang og velg Edit Claim Rules. Klikk på Issuance Authorization Rules som vist på bildet under.

Deny All

Hvis det skal legges in en deny all regel, så kan det gjøres her. Som nevnt tidligere kan det gjøres for å sikre at alle forsøk på innlogging logges. Deny all skjer dersom det ikke ligger noen regler her.

iOS Claim Rule

Velg Add Rule og Send Claims Using a Custom Rule. Gi regelen et beskrivende navn og lim inn Claim Rule markert i grått over.


Trykk OK slik at både regel og RPT blir lagret. Til slutt er det bare å teste om regel fungerer. Det skal i utgangspunktet ikke være nødvendig å restarte ADFS tjeneste, men kan være greit å gjøre det om man er usikker på at endringen har tredd i kraft.

 

 

Legg igjen en kommentar