Ich habe eine einzelne Seite Anwendung, die Durandal verwendet. Auf einer der Seiten muss ich mich mit OAuth 2 authentifizieren, um ein Token zu erhalten, mit dem ich einen Web-Service anrufe. Ich möchte meinen Anwendungsstatus für einzelne Seiten nicht verlieren, daher möchte ich die OAuth-Autorisierung in einem neuen Fenster durchführen.Authentifizieren mit OAuth2 in einer Durandal-Einzelseitenanwendung
Das ungelöste Problem, das ich jetzt habe, ist OAuth-Token aus dem untergeordneten Fenster zum übergeordneten übergeben. Ich habe versucht, einen Weg zu finden, das Token aus dem Child-Fenster in die Durandal-App im Elternfenster zu bringen, aber ich habe keine Lösung gefunden. Schließlich entschied ich mich, es in eine Eigenschaft des Elternfensters zu setzen, aber es funktioniert immer noch nicht.
Hier ist mein Modul-Code:
activate: function() {
var authTokenDeffered = $.Deferred();
if (!window.myAuthToken) {
var authWindow = window.open(
"https://oauth.myprovider.com/authorize?response_type=token&client_id=98599205d0aa4837a074cc19163bd38e&display=popup",
"_blank", "modal=yes,alwaysRaised=yes");
var checkConnect = setInterval(function() {
if (!authWindow || !authWindow.closed) return;
clearInterval(checkConnect);
// I expect token here, but I do not get it
console.log(window.myAuthToken);
authTokenDeffered.resolve(window.myAuthToken);
}, 100);
} else {
authTokenDeffered.resolve(window.myAuthToken)
}
var campaigns = this.campaigns;
return authTokenDeffered.then(function (authToken) {
http.get('https://myprovider.com/my-service', {}, {'Authorization': 'Bearer ' + authToken})
.then(function (response) { campaigns(response); });
});
},
Die OAuth 2 Rückruf Seite das folgende Skript hat:
var token = /access_token=([0-9a-f]+)/.exec(document.location.hash)[1];
window.parent.myAuthToken = token;
window.close();