ASP.NET 웹 API 2로 RESTfull 백엔드를 구축 중입니다. FTM 저는 클라이언트가 있습니다. : AngularJs 웹 응용 프로그램, Android 및 IPhone 응용 프로그램입니다.크로스 플랫폼 다중 클라이언트 oauth2 API 디자인
Google 및 Facebook을 통한 로그인을 모두 작성해야하며 설계시 도움이 필요합니다. 내 생각은 다음 (예제로 사용하여 Google 인증)입니다
:
내가 4 "의 OAuth 2.0 클라이언트 ID를"만들 구글 개발자 콘솔에: AngularJS와 응용 프로그램에 대한
- 을 (웹 응용 프로그램 유형, 원점 허용) 안드로이드 (안드로이드 형식)
- (IO 유형)(어떤 허용 기원없이 형 웹 응용 프로그램) 웹 API 백엔드에 대한3210
모든 클라이언트 권한을 부여 및 위해도 하지만를 필요한 범위에 요청 사용자의 동의 자체 라이브러리/API와 구글 연락을 드릴 것입니다 오프라인 사용. 따라서 authorization_code는 고객 (Google)에서 수신합니다.
모든 클라이언트은 웹 백엔드 GET 메소드 인 ExternalLogin을 호출하고 authorization_code를 입력 매개 변수로 보냅니다.
웹 백엔드는 (Google API를 통해) access_token에 대한 authorization_code를 교환하고 Google API를 통해 필요한 모든 사용자 정보를 Google로부터받습니다. 사용자가 이미 등록한 경우 데이터베이스를 확인하고 (그렇지 않으면 - 응용 프로그램에서 계정을 생성합니다) 로컬 액세스 토큰을 발행하여 이후의 모든 웹 백엔드 호출에 사용해야합니다.
혜택
은 매우 간단하다 :- 간단한 흐름, 모든 클라이언트
- 모든 클라이언트
- 논리에 등록/로그인 할 수있는 하나의 방법에 대해 동일 수집 사용자 데이터는 한 곳 (웹 백엔드)에 있으므로 사용자가 수집 할 추가 데이터가 필요한 경우 백엔드에서만 변경해야합니다. 클라이언트은 동의 화면에만 범위를 추가해야합니다.
내 질문은 :
- 다음과 같은 흐름이 충분히 정확하고 안정적이다? 페이스 북의 인증에도 사용할 수 있습니까?
- FTM 4 단계에서 멈추었습니다. AngularJs는 ClientId에 authorization_code를 받았습니다.웹 백엔드가 access_token 에 대한이 authorization_code를 다른 ClientId (웹 백엔드는 Google 개발자 콘솔에 자체 ClientId가 있습니다. 위의 내용 참조)과 교환하려고합니다. unauthorized_client 오류가 발생합니다. 이상한, Google 개발자 콘솔에서 같은 '프로젝트'에있는 모든 ClientID가 발생합니다. 그것을 작동시키는 방법이 있습니까?
참고 : AngualrJS 앱의 클라이언트 ID를 사용하여 인증 한 사용자는 Android를 통해 액세스 할 수 없습니다. 클라이언트 id, secret, 새로 고침 토큰은 섞이지 않는 그룹입니다. – DaImTo
@DaImTo 귀하의 의견에 감사드립니다. Android/AngularJS/IOS ClientId를 통해 인증하려면 User가 필요하고 authorization_code를 백엔드로 전달하고 Web-Backend ClientId가있는 사용자 데이터에 액세스하여 authorization_code를 전달해야합니다. 네가 생각하지 않을거야? – z0omie
웹 자격 증명으로 만든 새로 고침 토큰은 모바일 응용 프로그램의 자격 증명을 사용하여 새로 고칠 수 없습니다. Android/AngularJS/IOS를 사용하여 사용자에게 액세스를 요청하는 경우 Android/AngularJS/IOS 자격증 명을 사용하여 액세스해야합니다. 동일한 프로젝트에서 만들어 졌기 때문에 혼합 할 수 없습니다. – DaImTo