2016-08-08 22 views
1

Ich habe ADAL für iOS mit einem ADFS 3.0-Server arbeiten. Es öffnet sich eine Webansicht, der Benutzer authentifiziert sich und ich bekomme einen Rückruf mit einem Zugriffstoken.Wie identifiziert man einen Benutzer, der mit ADAL gegen ADFS 3.0 authentifiziert wurde?

Das Problem, das ich habe, ist, dass ich keine Informationen zurück über die Identität des Benutzers bekomme. Die userInformation Eigenschaft ist nil. Es gibt keine id_token in irgendeiner der HTTP-Antworten und ich bin nicht sicher, wie man einen an erster Stelle anfordert. Und ich habe woanders gesehen, dass die Microsoft-Leute sagen, dass ADFS 3.0 id_token überhaupt nicht unterstützt. Ich habe auch das JWT-formatierte Zugriffstoken geparst und es gibt dort keine Information, die ich verwenden kann, um den Benutzer zu identifizieren.

Auf der ADFS 3.0-Serverseite haben wir eine Anspruchsregel konfiguriert und aktiviert, die besagt, dass die vertrauende Seite mit GUID, Vorname, Nachname und E-Mail-Adresse versehen wird. Aber das Hinzufügen dieser Regel machte keinen Unterschied in den Antworten, die ich durch ADAL erhalte.

Wie kann ich einen Benutzer identifizieren (d. H. GUID, Vornamen, Nachname und E-Mail-Adresse abrufen), der über ADAL für einen ADFS 3.0-Server authentifiziert wurde? Gibt es einen Endpunkt auf dem ADFS 3.0-Server, den ich mit dem bereitgestellten Zugriffstoken treffen kann, wo ich diese Informationen anfordern kann?

Antwort

1

Es stellt sich heraus, dass ADFS 3.0 möglicherweise id_token nicht unterstützt, aber wenn Sie die Anspruchsregeln für die vertrauende Partei korrekt festgelegt haben, werden sie der obersten Ebene des Zugriffstokens hinzugefügt, das Sie erhalten. Offenbar sollte der Anspruch der Regel in etwa so aussehen, wenn es richtig ist:

Claim Rule

Das Zugriffstoken ein JWT Token ist so kann es decodiert werden und die von dort abgerufenen Werte. Wenn decodiert wird, wird es in etwa so aussehen:

{ 
    "appid": "5f9a5589-6064-423a-8a1a-6a0d7ddda19f", 
    "aud": "x-msauth-glazersapp://com.example.MyApp", 
    "auth_time": "2016-08-08T22:32:14.459Z", 
    "authmethod": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport", 
    "email": "[email protected]", 
    "exp": 1470699134, 
    "family_name": "John", 
    "given_name": "Doe", 
    "iat": 1470695534, 
    "iss": "http://adfs.example.com/adfs/services/trust", 
    "objectGUID": "c8oMVOOEskutnPVno41Y1w==", 
    "ver": "1.0", 
} 

„E-Mail“, „familien_name“, „GIVEN_NAME“ und „objectGUID“ wurden den Zugriffstoken hinzugefügt. Und aufgepasst, die GUID, wenn sie so bereitgestellt wird, ist tatsächlich Base64-codiert.

Weitere Informationen hier verfügbar: http://chrisrisner.com/Accessing-Resources-Secured-By-Azure-Active-Directory-with-iOS-and-Android

+1

Cool. Sie haben volle Unterstützung für id_token in ADFS 2016. Weitere Informationen finden Sie unter https://technet.microsoft.com/en-us/windows-server-docs/identity/ad-fs/overview/ad-fs-scenarios-for-developers und https://technet.microsoft.com/en-us/windows-server-docs/identity/ad-fs/ad-fs-development für Walk-Throughs. –