2013-02-17 3 views
5

Google 인증 시스템으로 로그인을 사용하는 회사의 내부 웹 앱이 있습니다. 그것은 대부분 잘 작동하고, 구글로 인증 할 수 있고, 내 앱이 기본 사용자 세부 정보에 액세스 할 수 있도록 동의 할 수 있으며, 앱에 반환 될 때 실제로 사용자 정보를 얻을 수 있습니다.google을 통한 로그인은 항상 사용자 동의를 묻습니다.

문제는 내가 동의 할 때마다 매번 그렇게 할 필요가 없다는 것이 었습니다. 이것은 잘못된 가정입니까? 지금은 Google이 "login with google"을 클릭 할 때마다 내 앱으로 리디렉션되지 않고 동의해야합니다.

필자는 github (phil sturgeon의 라이브러리 포크)에서 PHP (codeigniter)와 꽤 좋은 Oauth 라이브러리를 사용하고 있습니다. 거기에 일부 param 전달해야한다 그래서 사용자가 처음으로 후 매회 동의 할 필요가 없습니까?

답변

15

Google 로그인에는 항상 사용자 동의가 필요하지 않습니다. OAuth2 로그인 절차를 사용하는 경우 재 승인없이 두 번째 로그인 할 수 있어야합니다. https://developers.google.com/accounts/docs/OAuth2Login

일부 상황에서는 자동 승인이 사용 중지 될 수 있으며 모든 로그인에 대해 사용자 동의가 필요합니다.

첫 번째 가장 일반적인 경우는 애플리케이션에서 Google에 매번 동의를 촉구하도록 명시 적으로 요청하는 경우입니다. 예제 또는 샘플 코드에서 복사 한 승인 요청에 'prompt = consent'또는 이전의 비표준 양식 'approval_prompt = force'가 포함되어 있는지 확인하십시오. 이러한 매개 변수를 제거하면 자동 승인이 작동하기 시작합니다.

리디렉션 URL이 'localhost'또는 글로벌 DNS 네임 스페이스에 속하지 않는 다른 URL을 기반으로하는 경우도 있습니다. 이 경우 보안상의 이유로 Google은 accounts.google.com 도메인의 사용자 컴퓨터에 쿠키를 설정하여 _this_device_ 권한이있는 사용자에게 localhost (또는 로컬 도메인)의 'foo'에 로그인하도록 신호를 보냅니다. 쿠키를 찾으면 Google은 두 번째 요청에 동의 함을 자동 승인합니다. 그 이유는 'localhost'(또는 로컬 DNS 네임 스페이스에 구축되지 않은 로컬 도메인 또는 다른 URL)의 의미는 장치에 따라 다르므로 장치간에 권한을 적용하면 보안 위험이 발생할 수 있기 때문입니다. 따라서 퇴근시 모든 쿠키를 지우도록 브라우저를 구성한 경우 절대 URL이 아닌 절대 URL을 사용하면 을 사용하면 사용자가 매번 동의하는 것을 볼 수 있습니다. 해결 방법은 인터넷에서 유효한 호스트 이름으로 엔드 포인트를 호스트하는 것입니다. 호스트는 인트라넷 외부에서 액세스 할 필요가 없으며 호스트 이름 만 전세계에서 유효해야합니다. 또는 accounts.google.com을에서 쿠키 삭제 정책

+0

감사합니다. 제 3 자 lib로 다이빙하면, 그것은 approval_prompt = force를 명시 적으로 추가하고있었습니다. 내가 읽었던 문서에서 그 점을 발견하지 못했지만 실제로 문제를 해결했다. 매력처럼 일하면서 고마워! – Greg