Integration der iPhone-Anwendung mit Shibboleth

8

Hat jemand eine iPhone-Anwendung mit einem Shibboleth-Identity-Provider integriert? Googling hat nichts gefunden, also frage ich die Gurus direkt.

Wenn es vorher nicht getan wurde, ist es machbar?

    
user353829 20.12.2009, 06:05
quelle

3 Antworten

15

Die Antwort auf beide ist "Ja".

Ich bin ein Java-Typ und werde vor zwei Wochen gefragt:

  • Lernziel-C
  • Schreiben Sie eine native iPhone App
  • Programmgesteuert mit Shibboleth authentifiziert
  • Laden Sie eine Anzeige Shibboleth geschützte Datendatei
  • herunter

... War ein wenig entmutigend. Zusammen mit der Abwesenheit von Forenbeiträgen, um zu helfen, hat mich veranlasst, meine Erfahrungen zu teilen.

Hier ist eine Übersicht, gefolgt von einem hoffentlich sehr hilfreichen Beispielcode. Bitte stimme für meine Antwort, wenn das hilft! Es lohnt sich ein paar Wochen meiner Zeit:)

Damit eine Anwendung auf dem iPhone Shibbolisierte Ressourcen herunterladen kann, muss Folgendes geschehen:

  1. Verwenden Sie die URL-APIs in Cocoa, um die HTTP-Anforderung für die betreffende Ressource zu senden.
  2. Implementieren Sie eine Delegatklasse für die Anforderung an:
  3. Reagieren Sie auf den SP, um den IdP (automatisch mit freundlicher Genehmigung von Cocoa)
  4. weiterzuleiten
  5. Reagieren auf Serverzertifikat-Vertrauensstellungen
  6. Reagieren Sie auf Benutzeranmeldungs-Challenges
  7. Reagieren Sie auf Fehler (falls erforderlich)
  8. Empfange die "Bindungsvorlage" des IdP für den authentifizierten Benutzer, ein HTML-Formular, das den Benutzer mit zwei Parametern zurück zum SP leitet
  9. Programmatisch HTTP POST die zwei Parameter vom IdP zurück zum SP.
  10. Cookies werden automatisch gespeichert und mit freundlicher Genehmigung von Cocoa erneut
  11. Implementieren Sie einen zweiten URL-Anforderungsdelegierten, um die ursprünglichen Anforderungsdaten zu empfangen.

Hier sind einige nützliche Hinweise von Apple und Shibboleth:

Und hoffentlich kann ich die ganze Quelle für eine kurze Demonstration einschließen.

%Vor%     
EC_Johnson2000 11.03.2010, 22:27
quelle
1

Ich habe genau das geschafft, aber ich brauchte einige Zeit, um jeden Schritt des Prozesses zu verstehen und ihn perfekt zu reproduzieren. Wenn ich Zeit habe, könnte ich ein ausführliches Tutorial schreiben, weil ich bei vielen Problemen keine Hilfe gefunden habe. Die Sache ist, es hängt auch von der Website ab, zu der du dich verbinden willst, also folgt dir vielleicht nicht der gleiche Pfad wie meiner (sein Prozess ist der selbe wie der, der beschrieben wurde): http: //shib.kuleuven. be / dataflow / dataflow-cas3-shib13-post.shtml "> hier ).

Um alle Anfragen zu sehen, die von meinem Browser (Chrome) zum Herstellen einer Verbindung ausgelöst wurden, habe ich das Netzwerk-Bedienfeld für Entwicklertools verwendet, wobei "Protokoll beibehalten" aktiviert ist.

Ein paar Tipps:

  • 1 °) Sie müssen "_idp_authn_lc_key ..." Cookie erhalten. Es gibt eine Anfrage, die es für Sie festlegen, finden Sie es.

  • 2 °) Sie benötigen das Login-Ticket (LT -...). Sie finden es wahrscheinlich im Hauptteil der Seite, auf der Sie Ihre Anmeldeinformationen eingeben.

  • 3 °) Sie benötigen ein Serviceticket (ST -...). Wieder finden Sie es auf der Seite, die die vorherige Anfrage zurückgegeben hat.

  • 4 °) Sie benötigen SAMLResponse. Wieder finden Sie es auf der Seite, die die vorherige Anfrage zurückgegeben hat.

  • 5 °) Schließlich können Sie sich anmelden, indem Sie SAMLResponse an den Service Provider zurücksenden. Du solltest hier auf die Verschlüsselung achten. Ich hatte ein paar "+" oder "=", die ich in "% 2B" und "% 3D" ändern musste. Sie erhalten einen "_idp_session" -Cookie, mit dem Sie sich ohne all diese Unordnung wieder verbinden können.

Wenn jemand versucht, das Gleiche zu tun, würde ich gerne helfen! Schick mir einfach eine Nachricht.

    
Pierre 12.08.2014 14:31
quelle
0

Ich habe die Lösung von EC erfolgreich als Ausgangspunkt verwendet. Die einzige andere Sache, die ich hinzufügen würde, ist, dass Sie wirklich darauf achten müssen, dass nur eine Anfrage gleichzeitig abläuft. In unserer Implementierung würde der Authentifizierungsprozess zwischen mehreren asynchronen Anforderungen, die gleichzeitig ausgeführt werden, durcheinander geraten. Die Verwendung von NSOperation zum Drosseln der Warteschlange schien mir gut zu funktionieren.

    
cfihelp 06.04.2010 11:18
quelle

Tags und Links