전자 응용 프로그램을 표준 브라우저 페이지로 생각하십시오. 그러면 표준 oauth2 플로우가 생깁니다.
우선, 제 3 자 서비스를 위해 clientId 및 clientSecret을 저장할 미들웨어 서버가 필요합니다.
전자 응용 프로그램과 미들웨어 서버 사이에 세션과 같은 것을 만들어야합니다 (아래 예제를 보겠습니다).
아래에서는 github을 인증하는 프로세스를 보여줍니다.
https가 필요합니다.
미들웨어 서버를 example.com에서 사용할 수 있다고 가정합니다. 당신의 필요 최소 두 개의 엔드 포인트 :
- GET : https://example.com/initAuth/
- 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을 구축해야합니다
redirect_uri
이 두 번째 엔드 포인트가 될 것입니다 GET https://github.com/login/oauth/authorize
- https://example.com/oauth/token
state
첫 번째 UUID 평소와 같이
- 다른 매개 변수가 될 것입니다.
이제이 끝점에서 전자 세션/토큰 uuid 및 빌드 된 URL로 돌아갑니다.
전자 쇼는 target = "_ blank"와 (과) 관련된 전자 쇼 링크입니다 - 그것은 separe tab/window에서 열어야합니다. 전자는 세션/토큰 uuid를 기억해야합니다.
사용자가 링크를 클릭하면 oauth 프로세스로 들어가서 앱을 수락합니다. 그런 다음 미들웨어 서버의 두 번째 끝점 (https://example.com/oauth/token)
서버가 code
및 state
에 도착하게됩니다.서버가 state
과 함께 전자 응용 프로그램을 등록했는지 확인해야합니다. 그리고 만약 존재한다면 서버는 code
과 client_secret
을 access_token
으로 교환 할 필요가 있습니다. (나는 설명하지 않을 것입니다 - 이것은 표준 oauth 흐름입니다). 임시 저장소 (redis) access_token에 두 개의 uuid를 저장하십시오. 응답으로이 탭을 닫을 스크립트 또는 일부 메시지가있는 일반 html보기로 html보기를 렌더링합니다.
전자 응용 프로그램은 미들웨어 서버에 access_token이 있는지 알아야합니다.
- 전자는 제 3의 엔드 포인트 세션/토큰 uuid로 전송하여 시간별 또는 시간별 미들웨어 서버를 폴링 할 수 있습니다. 그리고 만약 access_token 서버가 있다면 그것을 돌려 줄 것입니다.
- 기본 창은 두 번째 "oauth"창이 닫혀 있는지 확인한 다음 access_token에 대한 미들웨어 서버에 요청을 보낼 수 있습니다.
또는 다른 방법으로는 미들웨어 서버에 access_token을 저장할 수 있으며 전자는 github에 요청을 보내지 않지만 서버에만 요청하면 서버는 github에 요청을 보내고 응답을 전자로 반환합니다.
현재로서는 클라이언트 쪽에서 클라이언트 비밀 키를 가져야하고 실제로 그렇습니다.하지만 그 순간에 보이는 것처럼 보입니다. – shashi