2016-06-30 14 views
3

Wir haben derzeit eine Shibboleth-Implementierung, die einen bestimmten Pfad schützt. Da es sich bei diesem Pfad jedoch tatsächlich um eine HTTP-Anfrage handelt (mit einer AngularJS-App mit $ http), versucht shibboleth, diese Anfrage an den Identity Provider "weiterzuleiten", der Browser interpretiert dies jedoch einfach als unzustellbare Anfrage. Es wird an AngularJS zurückgegeben mit Status = -1 und keine zugeordneten Header/Daten.Catch 302 mit Apache und Rückgabe 401 statt

Ich möchte diese 302 abfangen und stattdessen eine 401 zurückgeben, und vorzugsweise in der Lage sein, die Antwortheader zu bearbeiten. Gibt es irgendwelche Möglichkeiten, dies mit Apache oder Shibboleth zu tun?

Relevante Blöcke:

# Proxy all requests to WebLogic 
<Location "/api"> 
    SetHandler weblogic-handler 
    WLSRequest On 
    WebLogicHost services.endpoint.com 
    WebLogicPort 9002 
</Location> 

# For requests marked as protected, apply shibboleth 
# If this block gets triggered, Shibboleth attempts redirect 
# which does not work with our architecture 
<Location "/api/protected"> 
    AuthType Shibboleth 
    ShibRequireSession On 
    ShibApplicationId default 
    ShibExportAssertion On 
    Require Shibboleth 
</Location> 

Wie geht es in AngularJS verwendet:

//API call to unprotected endpoint 
$http.get('http://hosted.on.apache.com/api/getData'); 

//API call to protected endpoint - Shibboleth triggered 
$http.get('http://hosted.on.apache.com/api/protected/getSecureData'); 
+0

Scheint, wie Sie eine 'login page' mit einem' api' authentifizieren versuchen, und Sie versuchen, 'ein solution' hacken, um sie' zusammen speake' zu ​​machen. Ich denke, die beste Lösung ist es, anstelle von diesem bestehenden Schema "Login" über "API" wie "REST" zu erlauben. Ich kenne Shibboleth nicht. Aber Sie können besser mit "Apache Reverse-Proxy" Mangel bekommen, um dies zu tun, kann hacken – oak

+0

, um 'hack it' Sie können http://stackoverflow.com/a/21074783/1211174 überprüfen. Aber besser ist es zu überprüfen, ob 'shibboleth' Authentifizierungs-basierte 'API' hat statt – oak

+0

Mögen Sie nur diese 302 oder alle abzufangen? – tuergeist

Antwort

0

Ich bin nicht vertraut mit Sibboleth, sondern als Menschen in den Kommentaren darauf hingewiesen haben, kann dies leicht mit erreicht werden ein Reverse-Proxy.

Siehe die in dieser Antwort als Referenz vorgeschlagenen Lösungen:

Apache - Reverse Proxy and HTTP 302 status message

+0

Ich suche nach einem verwertbaren HTTP-Code auf der Benutzeroberfläche, der die Anfrage selbst nicht behandelt (was zu ähnlichen Problemen führen würde, die im OP aufgelistet sind) – JLewkovich

0

Nun, ich denke, eine 302 bis 404 Umleitung ist nicht erforderlich. Versuchen Sie, das Folgende zu Ihrem/api/geschützten Bereich hinzuzufügen.

ShibRequestSetting requireSession 1 

Wie in der Dokumentation gezeigt, sieht hier ein typischer geschützter Pfad aus. https://docs.shib.ncsu.edu/docs/testing/index.html

<Location /api/protected> 
    AuthType shibboleth 
    ShibCompatWith24 On 
    ShibRequestSetting requireSession 1 
    require shib-session 
</Location>