2017-12-08 3 views
0

Ich bin neu in Okta, Javascript. Ich versuche, OktaAuth zu der bestehenden Jquery/javascript + Flask App hinzuzufügen.OktaAuth Javascript + Flask sendet keinen Code & Statuswert an Flask

Ich habe folgendes in meinem Javascript konfiguriert. Die Umleitung von Aufrufen an den serverseitigen Rückruf funktioniert. Aber übergeben Sie den Code nicht, geben Sie keine Werte ein, um fortzufahren. Kannst du mich bitte wissen lassen, was hier falsch ist? Jede Hilfe wird geschätzt.

var authClient = new OktaAuth({ 
    url: 'https://{okta-url}.com', 
    clientId: 'xxxxxx', 
    clientSecret: 'yyyyyyyyyy', 
    issuer: 'https://{okta-url}.com', 
    redirectUri: 'http://{redirect-url}/login' 
    //scopes: ['openid', 'email', 'profile'] 
}); 

var idToken = authClient.tokenManager.get('idToken'); 
console.log(JSON.stringify(idToken)) 
if (idToken) { 
    console.log('hi ${idToken.claims.email}!'); 
} 
else if (location.hash) { 
    authClient.token.parseFromUrl() 
     .then(function (idToken) { 
      console.log('hi ${idToken.claims.email}!'); 
      authClient.tokenManager.add('idToken', idToken); 
      console.log(idToken); 
     }); 
    console.log(JSON.stringify(authClient.token)) 
} 
else { 
    authClient.token.getWithRedirect({ 
     responseType: ['id_token', 'code', 'token'] 
    }); 
    console.log(authClient.token) 
} 

Antwort

1

Warnung: Es ist gefährlich, Ihr Client-Geheimnis in JavaScript-Code zu haben! Wenn Sie ein Client-Geheimnis offen legen, wird Ihr Passwort preisgegeben. Sie sollten es entfernen und eine neue Client ID/Secret erstellen, um sicher zu sein.

Es gibt zwei Möglichkeiten, OpenID Connect zu verwenden, was OktaAuth verwendet: mit einem serverseitigen Callback (dem Code-Fluss) oder vollständig auf der Client-Seite (der implizite Fluss). Du versuchst beides hier zu machen, und das ist wahrscheinlich der Grund, warum es sich seltsam benimmt.

Stattdessen tun:

var authClient = new OktaAuth({ 
    url: 'https://{okta-url}.com', 
    clientId: 'xxxxxx', 
    issuer: 'default', // Use the default Authorization Server 
}); 

var idToken = authClient.tokenManager.get('idToken'); 

if (idToken) { 
    console.log('hi ${idToken.claims.email}!'); 
} 
else if (location.hash) { 
    authClient.token.parseFromUrl() 
     .then(function (idToken) { 
      authClient.tokenManager.add('idToken', idToken); 
      console.log(idToken); 
     }); 
} 
else { 
    authClient.token.getWithRedirect({ 
     responseType: 'id_token' 
     // Use ['id_token', 'token'] if you also need an access token 
    }); 
} 

Dies wird Ihnen eine ID-Token erhalten, die Sie auf der Client-Seite verwenden können. Überwachen Sie die Konsolen- und Netzwerkanzeigen auf eventuell auftretende Fehler.