2017-12-08 16 views
0

나는 okta, javascript를 처음 사용했습니다. 기존 Jquery/javascript + Flask 앱에 OktaAuth를 추가하려고합니다.OktaAuth Javascript + Flask 코드 및 상태 값을 Flask에 보내지 않습니다.

자바 스크립트에서 다음을 구성했습니다. 리디렉션 서버 측 콜백 호출이 작동합니다. 하지만 코드를 전달하지 말고 상태 값을 전달하십시오. 여기서 뭐가 잘못 됐는지 알려주시겠습니까? 어떤 도움을 주셔서 감사합니다.

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) 
} 

답변

1

경고 :이 자바 스크립트 코드에서 클라이언트의 비밀을 가지고 위험하다! 클라이언트 암호를 공개하는 것은 암호를 나타내는 것과 같습니다. 이를 제거하고 안전을 위해 새 클라이언트 ID/암호를 생성하는 것을 고려해야합니다.

서버 측 콜백 (코드 플로우) 또는 클라이언트 측 (암시 적 플로우)에서 OktaAuth가 사용하는 두 가지 주요 방법 인 OpenID Connect를 사용할 수 있습니다. 당신은 여기에서 둘 다하려고 애를 쓰고 있는데, 아마도 그것이 이상하게 행동하는 이유 일 것입니다. 대신

, 이렇게 :

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 
    }); 
} 

이것은 당신이 클라이언트 측에서 사용할 수있는 ID 토큰을 얻을 것이다. 콘솔 및 네트워크 패널에서 발생하는 모든 오류를 확인하십시오.