내가 만드는 API에 OAuth2를 사용하려고하지만 흐름이 작동하는 방법에 대한 설명을 사용할 수 있습니다. 유사한 질문 (예 : Securing my REST API with OAuth while still allowing authentication via third party OAuth providers (using DotNetOpenAuth))을 발견했지만 제 3 자 로그인과 관련하여 명확한 내용을 제공하지 않습니다.맞춤 API 용 OAuth2
위임에 의한 인증이 정상적으로 작동하는 경우 특히 OpenID를 사용하고 싶지 않습니다 (어쨌든). 지나치게 복잡해 보이고 제대로 지원되는 라이브러리가 많지 않습니다. 문제는 4 (틱) 엔티티로 분리
(내가 PHP + Laravel 4 사용하고 있습니다) : - 최종 사용자
- 자원 소유자 브라우저 (내 웹 사이트), 모바일 앱 또는 이와 유사한 도구
- 인증 서버 - 내 OAuth2 서버
- 리소스 서버 - 내 API. 사용자 데이터를 제공합니다.
- 사용자는 클라이언트에서 사용자 이름/암호를 채 웁니다 :
가 나는 사용자가 내 인증 서버와 로그인 계정 사용에 계정을 만들 때의 흐름을 알아 냈어요 생각합니다.
아직 워크 플로를 테스트하지는 않았지만 작동하는 것처럼 보입니다. 그러나 제 3 자 로그인은 더욱 어려워졌습니다. 이것이 내가 지금까지 가지고있는 것입니다 :
- Google/Facebook/LinkedIn을 통한 사용자 클릭 로그인.
- 사용자가 클라이언트에서 Google의 인증 서버 (광산 아님)로 리디렉션됩니다.
- 사용자가 user/pass를 사용하여 로그인하고 클라이언트가 일부 보호 된 리소스 (userinfo.email)를 가져올 수 있도록 권한 부여 - 위임을 통해 사용자를 인증합니다.
- 사용자가 Google 사용자 ID가 포함 된 Token + signed JWT로 다시 클라이언트로 리디렉션됩니다.
- 클라이언트가 JWT의 유효성을 검사합니다.
- 클라이언트는 클라이언트 자격 증명 플로우를 사용하여 자원 서버에 연결합니다. 새로운 토큰을받습니다.
- 클라이언트는 토큰을 세션에 저장합니다.
- Google 사용자 ID를 애플리케이션 사용자 ID로 변환하라는 클라이언트 요청. (이 연결은 가입하는 동안 만들어졌습니다.)
- 리소스 서버가 응용 프로그램 사용자 ID를 반환합니다. (서명 된 JWT)
- 클라이언트는 토큰 + 서명 된 JWT 사용자 ID를 사용하여 자원 서버에서 데이터를 요청합니다.
- 자원 서버는 JWT의 유효성을 검사하고 토큰 범위에 따라 데이터를 반환합니다.
이것은 효과가있을 수 있지만 너무 복잡합니다. 이러한 단계 중 일부를 건너 뛰는 방법이 반드시 있어야합니다. 나는 특히 8-10 단계에 관심이있다. 내가 아는 한, 사용자는 제 3 자 로그인을 사용하여 인증 서버와 전혀 상호 작용할 필요가 없습니다. 문제는 내 API에서 Google/Facebook/LinkedIn의 성공적인 id_token (또는 무언가)을 "계정"리소스에 가장 잘 연결하는 방법입니다.
지금 당장은 다른 클라이언트가 API에 연결하는 것에 대해 걱정하지 않지만 앞으로는 언젠가는 발생할 수 있습니다.
내가 이러한 API 중 하나가 사용자의 이메일을 제공합니다 생각하지 않습니다
은 OAuth2를의 사용을 설명하는이 자원을 발견. 따라서 여러 개의 소셜 계정 로그인을 그룹화하는 고유 한 ID가 없을 수도 있습니다. API에서 인증 된 후에 사용자에게 세부 정보를 입력하도록 요청할 수 있습니다. API 측면에서 OAuth2 API 프레임 워크를 사용하는 것이 좋습니다. 그들은 내부에 모든 것을 갖추고있어 다른 것들에 대해 걱정할 시간을 더 많이 가질 것입니다. :) – astroanu