Ich habe seit einigen Jahren eine SSO-Integration von meiner Website, ohne Probleme.
Kürzlich sagten Benutzer, dass sie, wenn sie sich anmelden, zu meiner Website weitergeleitet werden, um sich anzumelden, und dann wieder bei Discourse landen, wo sie immer noch aufgefordert werden, sich anzumelden. Ich habe versucht, das Problem zu beheben, aber ich sehe keine Probleme. Es scheint einfach so zu sein, dass am Ende, wenn die Weiterleitung zur Anmeldung erfolgt, etwas schief geht.
Wenn ich in Discourse nachsehe, ist das Benutzerkonto erstellt, aber aus irgendeinem Grund wird es nicht angemeldet.
Hier ist ein kurzes Video, das zeigt, was ich sehe…
Ich habe diese Informationen befolgt:
…und verwende die neueste discourse-sso-JavaScript-Bibliothek.
Dies ist meine AWS Lambda, die von einem API Gateway vorangestellt ist…
'use strict';
exports.handler = (event, context, callback) => {
console.log(event);
var discourse_sso = require('discourse-sso');
var sso = new discourse_sso("********************"); // Geheimnis verborgen
var body = JSON.parse(event.body);
var payload = body.sso; // aus eingehendem Request abrufen
var sig = body.sig; // aus eingehendem Request abrufen
if(sso.validate(payload, sig)) {
var nonce = sso.getNonce(payload);
var userparams = {
// Erforderlich, sonst wird eine Ausnahme ausgelöst
"nonce": nonce,
"external_id": body.externalId,
"email": body.email,
// Optional
"username": body.username,
"name": body.name
};
console.log("User: " + JSON.stringify(userparams));
var q = sso.buildLoginString(userparams);
console.log("q: " + q);
// Weiterleitung
var response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify({"q":q})
};
callback(null, response);
} else {
// Was tun, wenn die Validierung fehlschlägt?
var responseError = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify({"error":"SSO Validation Error"})
};
callback(null, responseError);
}
};
Wenn der Anmeldebutton von Discourse geklickt wird, ruft er meine Webanwendung auf, wo der Benutzer validiert wird und dann, wenn die Validierung erfolgreich ist, Folgendes aufruft…
if (state.get(["appState", "urlParams", "sso"]) && state.get(["appState", "urlParams", "sig"])) {
var userMetadata = getUserMetadata(result);
var body = {
sso: state.get(["appState", "urlParams", "sso"]),
sig: state.get(["appState", "urlParams", "sig"]),
externalId: keyPrefix,
email: userMetadata.email,
name: userMetadata.name,
username: username
};
request
.post('https://**********.execute-api.us-east-1.amazonaws.com/prod/discourse-sso')
.send(body)
.end(function (err, res) {
if (err || !res.ok) {
alert(err.message);
} else {
window.location.replace("https://forum.miralouaero.com/session/sso_login?" + res.body.q);
}
});
}
Jede Hilfe beim Verständnis, was vor sich gehen könnte, wäre willkommen.