Authentifizierung durch Session Cookie der RestAPI



  • Hallo ,

    derzeit arbeite ich an einem Projekt, bei welchem ich Daten eines Users über die RestAPI abrufen möchte. Ich habe aber Probleme mit der Authentifizierung und dem Session Cookie. CORS Anfrage wurde schon gestellt und bearbeitet.

    Ich habe ein eigenartiges Verhalten meines Tools festgestellt. Wenn ich einen Login-Request sende, wird dieser immer erfolgreich beantwortet. Wenn ich anschließend den Token der eingeloggten Person abfrage wird er nur unter folgender Bedingung zurückgegeben:
    Ich kriege NUR dann den Token, wenn ich mit dem selben Account bei {gemeinde}.church.tools angemeldet bin.

    Bin ich mit einem anderen Account angemeldet kommt ein (403) Forbidden. Wenn ich nicht angemeldet bin, kommt ein (401) Unauthorized.

    Code für den Login mit anschließendem Abruf des Tokens:

    $.ajax("https://jkbtreptow.church.tools/api/login", {
    	method: 'POST',
    	data: {username: username, password: password},
    	contentType: "application/x-www-form-urlencoded",
    	crossDomain: true,
    	dataType: "json",
    	success: function(data, status, jqXHR) {
    		getUserToken(data.data.personId);
    	},
    	error: function(data, status, jqXHR) { doSomething(); }
    });	
    

    Code für Abruf des Tokens:

    $.ajax("https://jkbtreptow.church.tools/api/persons/"+personId+"/logintoken", {
    	method: 'GET',
    	crossDomain: true,
    	xhrFields: { withCredentials: true },
    	success: function(data, status, jqXHR){ doSomething();	},
    	error: function(data, status, jqXHR) { doSomething(); }
    });	
    

    Hier die Fehlermeldungen für das Token abhängig von der ChurchTools Webseite:

    eingeloggt:

    success
    data{loginToken}
    

    nicht eingeloggt:

    GET https://{gemeinde}.church.tools/api/persons/491/logintoken 401 (Unauthorized)
    

    anderer Account:

    GET https://jkbtreptow.church.tools/api/persons/491/logintoken 403 (Forbidden)
    

    Was mache ich falsch?


  • ChurchToolsMitarbeiter

    Hi,

    das hört sich so an, dass du die Requests direkt über die Entwickler Console im Browser ausführst. Ist das korrekt?

    Wenn ja, dann musst du wissen, dass der Browser immer auch die Cookies für die Seite mitschickt. D.h. dein Session Cookie der Person die aktuell in CT eingeloggt ist. Somit werden alle Requests für diese Person ausgeführt.

    Hast du deinen Workflow schon mittels CURL oder Postman ausprobiert?



  • Hi,
    das Thema hat sich mittlerweile erledigt. Danke trotzdem für die schnelle Antwort. Mit Postman hat der Request funktioniert, da der Postman-Client die Cookies sichtlich speichert.

    Da ich den Ablauf jetzt aber Server-seitig durchführen lasse, gibt es keine Komplikationen mehr. Ich brauchte nur etwas Einarbeitungszeit in die Materie.

    Liebe Grüße aus Berlin und alles Gute für die Zeit der Krise 🙂


Log in to reply