2017-11-21 4 views
0

PayPal 로그인을 Android 앱에 통합하여 클라이언트를 Firebase 데이터베이스에 인증하려고합니다. 클라이언트 응용 프로그램에서 "signin withcustomtoken"함수를 사용하기 위해 제공된 uid에서 토큰을 만드는 node.js 서버에서 사용자 정의 funtion을 작성했습니다. 토큰을 얻으려면 https를 통해 uid를 nodejs 서버로 보내야합니까? 더 좋은 방법이 있습니까?Firebase 인증을위한 새로운 Federated Identity Provider를 작성하는 방법

답변

0

uid을 허용하는 HTTP 끝점을 만들지 않고 사용자 지정 토큰을 반환합니다. 이는 공격자가 누구나 자신의 uid을 가장하는 가장의 보안 취약점입니다. 해야 할 일은 다음과 같습니다.

  1. 페이팔 OAuth 코드 플로우를 구현하십시오. 당신은 타사 라이브러리를 사용할 수 있습니다.
  2. 페이팔 OAuth 인증 코드를 받으면이를 백엔드로 보내고 페이팔 클라이언트 ID와 암호를 사용하여 페이팔 새로 고침 토큰과 액세스 토큰을 교환합니다. 그런 다음 paypal 사용자를 포함하여 해당 페이팔 사용자와 관련된 사용자 정보를 얻을 수 있습니다. 그런 다음 Firebase Admin SDK를 사용하여 Firebase 사용자 정의 토큰을 작성한 다음 클라이언트에게 반환하십시오.
  3. 클라이언트에서 signInWithCustomToken을 사용하여 해당 사용자 토큰으로 로그인을 완료하십시오.

이 경우 권한 부여 코드를 사용하고 Firebase 사용자 지정 토큰을 반환하는 HTTP 끝점을 노출합니다.

기본 아이디어입니다 (세부 정보 제외). 물론 여러분은 여전히 ​​어떤 장치를 사용하여 흐름을 시작하고 끝내야하는지 확인해야합니다. 그런 다음 마지막 상태로 되돌려 놓았는지 확인하십시오. 또한 앱 링크 등을 사용하여 인증 코드가 올바른 앱으로 반환되는지 확인해야합니다. Firebase Dynamic Links가 도움이 될 수 있습니다.

+0

그것이 보안에 대한 내 관심사였습니다. firebase는 외부 서버와 직접 통신 할 수 없으므로 먼저 Google 인증을 사용하기로 결정했습니다. 사용자가 확인한 PayPal 계정이 있는지 여부를 표시하기 위해 데이터베이스에 플래그를 추가하고 클라이언트 응용 프로그램에서 Paypal oauth를 완전히 업데이트하도록 플래그를 추가합니다. 나는 node64 함수를 사용하여 클라이언트에서 ppaouth 플로우로 작업 할 수있는 base64 clientid : secret를 반환 할 수 있다고 생각합니다. 당신은 좋은 생각이라고 생각하니? 감사합니다 – Nullo

+0

당연히 아닙니다. 클라이언트 ID 또는 암호를 클라이언트에 반환하지 마십시오. 인증 코드 흐름은 백엔드 서버에서 완료하기위한 것입니다. – bojeil

+0

좋아, 내가 애플 리케이션 내부의 API 비밀을 난독 화하려고 시도하고 그것이 어떻게되는지 보려고한다. 유료 계획으로 전환하거나이 단계에서 내 서버를 설정해야 할 이유가 없습니다. – Nullo