2016-10-15 4 views
4

전자 응용 프로그램에서 사용자 인증을 구현하는 방법에 대한 자료를 찾고있었습니다.타사 전자 인증 사용자 인증

사용자가 로그인하고 가입 할 수 있도록 Github과 같은 타사 서비스를 활용하고 싶습니다. "일반적인"Node.js 응용 프로그램을 사용하면 passport.js 또는 유사하게 구현할 수 있습니다.

일렉트론 앱이 클라이언트 측이기 때문에 클라이언트 측 코드에서 클라이언트 비밀 키가 잘못되어 혼란이 있습니다. 그렇다면 전자 애플리케이션에서 타사 사용자 인증을 구현하는 프로세스는 무엇입니까?

+0

현재로서는 클라이언트 쪽에서 클라이언트 비밀 키를 가져야하고 실제로 그렇습니다.하지만 그 순간에 보이는 것처럼 보입니다. – shashi

답변

2

전자 응용 프로그램을 표준 브라우저 페이지로 생각하십시오. 그러면 표준 oauth2 플로우가 생깁니다.

우선, 제 3 자 서비스를 위해 clientId 및 clientSecret을 저장할 미들웨어 서버가 필요합니다.

전자 응용 프로그램과 미들웨어 서버 사이에 세션과 같은 것을 만들어야합니다 (아래 예제를 보겠습니다).

아래에서는 github을 인증하는 프로세스를 보여줍니다.

https가 필요합니다.

미들웨어 서버를 example.com에서 사용할 수 있다고 가정합니다. 당신의 필요 최소 두 개의 엔드 포인트 :

  1. GET : https://example.com/initAuth/
  2. GET : https://example.com/oauth/token

Github에서의 CLIENT_ID 및 client_secret는이 서버에 저장됩니다.

귀하의 전자 애플 리케이션은 https://example.com/initAuth/로 GET 요청을 보내드립니다. 그리고 서버가 두 개의 uuid를 생성해야합니다. 쌍으로 저장해야합니다 (예 : redis). 하나의 uuid는 승인 github 링크의 state 매개 변수에 대한 것이고 두 번째 것은 간단한 세션/토큰으로서 전자 애플리케이션을 식별하는 것입니다. 서버가 github에 액세스 github access에 URL을 구축해야합니다

  1. redirect_uri이 두 번째 엔드 포인트가 될 것입니다 GET https://github.com/login/oauth/authorize - https://example.com/oauth/token
  2. state 첫 번째 UUID 평소와 같이
  3. 다른 매개 변수가 될 것입니다.

이제이 끝점에서 전자 세션/토큰 uuid 및 빌드 된 URL로 돌아갑니다.

전자 쇼는 target = "_ blank"와 (과) 관련된 전자 쇼 링크입니다 - 그것은 separe tab/window에서 열어야합니다. 전자는 세션/토큰 uuid를 기억해야합니다.

사용자가 링크를 클릭하면 oauth 프로세스로 들어가서 앱을 수락합니다. 그런 다음 미들웨어 서버의 두 번째 끝점 (https://example.com/oauth/token)

서버가 codestate에 도착하게됩니다.서버가 state과 함께 전자 응용 프로그램을 등록했는지 확인해야합니다. 그리고 만약 존재한다면 서버는 codeclient_secretaccess_token으로 교환 할 필요가 있습니다. (나는 설명하지 않을 것입니다 - 이것은 표준 oauth 흐름입니다). 임시 저장소 (redis) access_token에 두 개의 uuid를 저장하십시오. 응답으로이 탭을 닫을 스크립트 또는 일부 메시지가있는 일반 html보기로 html보기를 렌더링합니다.

전자 응용 프로그램은 미들웨어 서버에 access_token이 있는지 알아야합니다.

  1. 전자는 제 3의 엔드 포인트 세션/토큰 uuid로 전송하여 시간별 또는 시간별 미들웨어 서버를 폴링 할 수 있습니다. 그리고 만약 access_token 서버가 있다면 그것을 돌려 줄 것입니다.
  2. 기본 창은 두 번째 "oauth"창이 닫혀 있는지 확인한 다음 access_token에 대한 미들웨어 서버에 요청을 보낼 수 있습니다.

또는 다른 방법으로는 미들웨어 서버에 access_token을 저장할 수 있으며 전자는 github에 요청을 보내지 않지만 서버에만 요청하면 서버는 github에 요청을 보내고 응답을 전자로 반환합니다.

+0

매우 명확한 대답입니다. 그러나 내가 이해할 수없는 한 가지 사실은 사용자가 미들웨어 서버를 통해 GitHub에 액세스 할 수있게되면 미들웨어 서버가 현재 공격에 노출되어 있지 않은 것인가? 예 : 동일한 사용자가 미들웨어 서버로 JavaScript 호출을하는 악의적 인 웹 사이트로 이동하면 GitHub 토큰을 얻을 수없고 사용자 계정에 액세스 할 수 없습니까? CORS는 미들웨어 서버가 전자 응용 프로그램에서 호출하도록하기 위해 와일드 카드를 허용해야하기 때문에 여기서도 도움이되지 않을 것이라고 생각합니다. 덕분에 –

+0

. 감사합니다. 마지막 단락을 확인하십시오. 더 안전한 방법을 보여줍니다. 우선 미들웨어에서 github 액세스 토큰을 얻는 방법은 없습니다. 미들웨어는 그것을 반환 할 방법이 없다. 미들웨어는 전자로부터받은 요청을 기반으로 github에 요청합니다. 최악의 시나리오에서 악의적 인 코드는 미들웨어가 속임수로 정의 된 행동을 취할 수 있습니다. 그러나 미들웨어가 요청 세션으로 이메일을 보내면 동작 만 수행하기 때문에 발생하지 않아야합니다. –

+0

그러나 미들웨어는 다른 악의적 인 응용 프로그램이 아니라 세션을 초기화하는 전자 응용 프로그램임을 어떻게 알 수 있습니까? 나는 뭔가를 놓치고 있어야합니다. –