2012-03-09 5 views
5

Google 애플리케이션을 PHP 앱에 통합하려고합니다. 사용자가 로그인 할 때 데이터베이스에 저장된 세션 ID를 사용자에게 할당하는 로그인 시스템이 이미 있습니다 (사용자 이름과 비밀번호를 입력 한 후). 세션 ID는 일정 시간 사용하지 않으면 유효하지 않게됩니다 (사용자가 구성 가능). , 5 분, 15, 60 일 수 있습니다 ...). 해당 세션 ID는 사용자가 아직 로그인되어 있는지 확인하기 위해 url에 전달됩니다. 로그 아웃 할 때 세션 ID가 데이터베이스에서 제거됩니다.Google Apps 및 OAuth 모범 사례

사람들이 Google ID를 데이터베이스에 저장하여 로그인 할 때, 로그인 할 때, 액세스 토큰을 요청하고, 사용자 정보를 쿼리하고, Google ID가 데이터베이스에 있는지 확인하고, 그렇다면 이 사용자에게 세션 ID. 이후 다른 API를 쿼리 할 수 ​​있기를 원하기 때문에 데이터베이스에 액세스 토큰 json도 저장합니다. 사용자가 로그 아웃하면 액세스 토큰도 데이터베이스에서 제거됩니다.

  • : 그러나 몇 가지 내 워크 플로우에 대한 불확실한 느낌의 투박한 느낌이

    이 내 사용자가 자신의 Google 계정을 사용하여 로그인 할 수 있습니다, 작품과 나는 API의가 저장 access_token은을 사용하여 조회 할 수 있습니다 force_approval을 사용하여 refresh_token을 얻는다면 데이터베이스에서 이전 토큰을 제거하고 사용자가 다시 로그인 할 때 새로 토큰을 입력하는 대신 새 액세스 토큰을 얻으려면이 새로 고침 토큰을 사용해야한다고 생각합니다. 반면에, 로그인 할 때, 나는 아직 누구인지 모른다. 그래서 사용할 새로 고침 토큰을 모른다. 어쩌면 새로 고침 토큰이 무엇인지에 대해 오해하고 있습니다. 또한 매번 승인을 강요하고 싶지 않으므로이 경우 refresh_token을 사용할 수도 없습니다.

  • 이전과 같이 사용자는 세션의 지속 시간을 결정할 수 있지만 google access_token은 항상 3600 초 후에 만료됩니다. 사용자가 시스템에서 한 시간 씩 작업하면 Google API가 갑자기 실패하여 다시 로그인해야하는 것은 정말 어리석은 일입니다. Google OAuth 놀이터에 '만료 전 토큰 자동 업데이트'확인란이 표시되지만이를 수행하는 방법이 표시되지 않습니다. 여기서 새로 고침 토큰을 사용해야합니까? 또는 백그라운드에서 새 토큰을 요청하면됩니다 (승인을 강요하지 않으면).

  • 현재로서는 userinfo 쿼리 (https://www.googleapis.com/oauth2/v2/userinfo)를 사용하여 사용자 ID를 찾고 있지만 tokeninfo (https : /www.googleapis.com/oauth2/v1/tokeninfo). Tokeninfo는 oauth 놀이터에 나열되어 있지 않지만 결과에 토큰이 유효한 기간이 표시됩니다 (단, 직접 계산할 수도 있음). 하나가 다른 것보다 선호됩니까?

  • 데이터베이스 (access_token, id_token, expires_in 및 token_type)에 json 개체 전체를 저장하고 있지만 access_token 만 저장하면 내 앱이 완벽하게 작동한다고 느낍니다 (expires_in 시간 변경). 예를 들어 id_token을 저장해야합니까?

Google 개발자 문서 (developers.google.com)는 때로는 부족하다는 것을 알게됩니다. 다른 훌륭한 정보원을 알고 있다면 그 사람도 관심이 있습니다.

답변

4

userinfo 엔드 포인트와 같은 개념이 나오는 가장 최근의 OpenID Connect Specs을 살펴 본다면 도움이 될 것이라고 생각합니다. OpenID 연결은 OAuth 2 위에 구축됩니다. 거기에는 꽤 많은 것이 있지만, 여전히 가치가 있습니다. This blog article도 매우 좋습니다 (같은 블로그에서 다른 사람들이 그렇듯이).

불행히도 Google의 구현이 최신 사양 초안으로 최신 버전이 아니므로 당분간 이동 목표가 될 것입니다. 지난 1 년 동안 이러한 것들이 많이 바뀌 었습니다.

이전 인증을 새로 고치는 대신 사용자를 인증 할 때마다 새로운 액세스 토큰을 얻어야한다는 점에 동의합니다. 사용자가 로그인하여 액세스 토큰을받을 때까지 사용자가 누구인지 알 수 없습니다. 일반적으로 액세스 토큰의 수명은 사용자 세션에 연결되어 있지 않습니다. 발급 된 응용 프로그램은 이론적으로 사용자의 존재와 관계없이 리소스에 액세스 할 수 있습니다. 토큰 만료 시간을 초과하여 리소스에 계속 액세스하려면 새 토큰을 얻기 위해 해당 시점에 새로 고침 토큰을 제출해야합니다. 나는 "auto-refresh"기능이 무엇인지 모르겠다.

Google의 tokeninfo은 OpenID 연결의 끝점 인 check_id과 비슷하지만 액세스 토큰 또는 ID 토큰 중 하나를 허용한다고 생각합니다. 만료 시간은 다를 수 있습니다. 대체로 user_id을 반환하는 check_id에서보다 더 자세한 사용자 데이터를 userinfo 끝점에서 검색 할 수 있습니다.

id_token을 저장할 필요가 없습니다. 이는 권한 부여 서 v에 의한 사용자의 인증 레코드와 같습니다. 액세스 토큰은 사용자 신원을 확인하고 나면 응용 프로그램에서 유지 관리에 관심을 가질 것입니다.

+0

귀하의 의견을 많이 보내 주셔서 감사 드리며 제공하신 기사를 읽으면서 길을 따라 나를 도울 수 있기를 바랍니다. – Bram