2017-11-28 8 views
0

각도 2 (전자) 응용 프로그램에서 OAuth2 인증을 구현하려고합니다.현재 창에서 전자 응용 OAuth2

나는 사용자가 '로그인'버튼을 클릭 한 후 호출되는 팝업을 통해이를 달성합니다.

팝업 사용자가 자신의 자격 증명을 입력하고 액세스 허용 및 확인 코드가 반환되며 팝업없이 수행 할 수없는 리디렉션 요청을받을 수 있습니다.

return Observable.create((observer: Observer<any>) => { 


     let authWindow = new electron.remote.BrowserWindow({ show: false, webPreferences: { 
     nodeIntegration: false 
     } }); 

     authWindow.maximize(); 
     const authUrl = AUTHORIZATION_WITH_PROOF_KEY_URL 
      + `?client_id=${CLIENT_ID}&response_type=code&scope=api_search&` 
      + `redirect_uri=${REDIRECT_URL}&code_challenge=${challenge}&code_challenge_method=S256`; 

     if (this.clearStorage) { 
     authWindow.webContents.session.clearStorageData({},() => { 
      this.clearStorage = false; 
      authWindow.loadURL(authUrl); 
      authWindow.show(); 
     }); 
     } else { 
     authWindow.loadURL(authUrl); 
     authWindow.show(); 
     } 

     authWindow.webContents.on('did-get-redirect-request', (event, oldUrl, newUrl) => { 
     const code = this.getCode(newUrl, authWindow); 

     if (!code) { 
      this.clearStorage = true; 
      return; 
     } 

     this.requestToken({ 
      grant_type: 'authorization_code', 
      code: code, 
      code_verifier: verifier, 
      redirect_uri: REDIRECT_URL 
     }) 
      .subscribe((response: { access_token: string, refresh_token: string }) => { 
      observer.next(response); 
      }); 
     }); 

     // Reset the authWindow on close 
     authWindow.on('close',() => { 
     authWindow = null; 
     }); 
    }); 

을하고 당신은 내가 새로운 BrowserWindow을 만드는거야 위의 코드에서 볼 수 있듯이 : 내가 잡을 수있어 그 접근 방식

new electron.remote.BrowserWindow({ show: false, webPreferences: { 
     nodeIntegration: false 
     } }); 

과 함께 여기

작동 구현

authWindow.webContents.on('did-get-redirect-request', (event, oldUrl, newUrl) => { 
     .... 
    } 

으로 시작하는 리디렉션 리디렉션 요청을 처리하지만이 문제를 해결할 수 없습니다. 팝업 (모달). '(did- 나는 현재 창에서 원격 URL에서 로그인 화면을 얻을 내 방식으로

return Observable.create((observer: Observer<any>) => { 


     let authWindow = electron.remote.getCurrentWindow(); 

     const authUrl = AUTHORIZATION_WITH_PROOF_KEY_URL 
      + `?client_id=${CLIENT_ID}&response_type=code&scope=api_search&` 
      + `redirect_uri=${REDIRECT_URL}&code_challenge=${challenge}&code_challenge_method=S256`; 

     if (this.clearStorage) { 
     authWindow.webContents.session.clearStorageData({},() => { 
      this.clearStorage = false; 
      authWindow.loadURL(authUrl); 
     }); 
     } else { 
     authWindow.loadURL(authUrl); 
     } 

     authWindow.webContents.on('did-get-redirect-request', (event, oldUrl, newUrl) => { 
     debugger; 
     // this is not called, I'm not able to catch up redirect request 
     }); 

     // Reset the authWindow on close 
     authWindow.on('close',() => { 
     authWindow = null; 
     }); 
    }); 

하지만 문제는 내가 가진 요청을 리디렉션 잡을 수 아니에요입니다 : 여기

내 시도 get-redirect-request ') 이벤트를 수신합니다.

나는 'will-navigate'및 많은 다른 것들도 시도했다.

모든 종류의 도움을 주시면 감사하겠습니다.

감사

답변

0

나는 전자 애플 리케이션을위한 OAuth를 기반으로 사용 다루 내가 Google's AppAuth-JS libraries 당신을 가리키는 줄 알았는데 직접 답을 가지고 있지 않지만.

우리 회사는 모바일 케이스 용 AppAuth 라이브러리를 사용했으며 우리 회사에서는 보안 코드가 적고 취약점을 피할 수 있도록 매우 잘 작동했습니다.

Electron Code Sample도 있습니다. 문제를 해결하기위한 몇 가지 힌트를 제공하겠습니다.