2013-05-03 3 views
0

예를 들어 사용자가 자신의 Google 계정으로 원격 서버에 로그인 할 수 있도록하려면 THIS입니다.Gmail OAuth2 토큰 및 클라이언트 스푸핑 확인

기본적으로 클라이언트에서 access_token을 가져 와서 내 서버로 보냅니다. 서버에서 응답

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=XXXX 

의 응답을 확인하고 서버에서 인증합니다.

하지만 보안 질문이 있습니다. 악의적 인 개발자가 Gmail 로그인을 허용하는 앱을 만들고 사용자의 액세스 토큰을 저장하고이를 내 서버에서 자신의 스푸핑에 사용하면 어떨까요? 어떻게 피할 수 있습니까? 액세스 토큰을 얻은 응용 프로그램의 서명을 확인하는 방법이 있습니까?

{ 
    "issued_to": "XXXXXXXXXXXXXX.apps.googleusercontent.com", 
    "audience": "XXXXXXXXXX.apps.googleusercontent.com", 
    "user_id": "15285874285447", 
    "scope": "https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email", 
    "expires_in": 3562, 
    "email": "[email protected]", 
    "verified_email": true, 
    "access_type": "online" 
} 

그래서 아마 또는 대상 issued_to 필드가 검증을 위해 중요하다 반환

토큰 정보 같은입니까?

편집 : 나는 중간 공격에서 남자를 의미하지는 않습니다. 예를 들어 Gmail에 로그인 할 수있는 VirusX라는 게임을 만들었다 고 상상해보십시오. 추가 유효성 검사가 없으면 access_tokens를 저장하고 gmail 로그인을 사용하여 다른 앱에 액세스 할 수 있습니다. 그것은이 방법으로 해결하는 페이스 북의 API 사용

: 당신은 당신의 FACEBOOK_APP_ID를 사용하여 토큰을 요청

답변

1

tokeninfo 엔드 포인트는 아마 토큰의 유효성을 검사합니다. HTTPS를 사용하여 통신하는 한 안전 할 수 있습니다. 토큰을 직접 풀고 파싱 할 수도 있습니다.이 라이브러리가 있지만 실제로는 매우 쉽습니다. 여기를 참조하십시오. details. 위에서 제시 한 백엔드 호출 링크를 실제로 확인해야합니다. 더 강력하고 사용자를 확인할 수는 있지만 요청은 자신의 앱에서 나옵니다 (루트 된 장치에서 바보짓을하는 방법이 있습니다).편집 질문에 대한

: 당신이 그것을 검증 할 수 있도록 토큰, 서명

. 유효성 검사가 실패하면 토큰이 변조되어 신뢰하지 않아야합니다 (Google tokeninfo 엔드 포인트에서 해당 작업을 수행함). 유효 기간도 있으므로 만료되었는지 확인할 수 있습니다. 따라서 누군가가 토큰에 액세스하여이를 서비스 (재생)로 보내면 제한된 시간 (일반적으로 30-60 분) 동안 만 사용할 수 있습니다. 백엔드 유효성 검사 기술을 사용하는 경우 사전에 등록해야하는 패키지 이름 및 서명 인증서 해시의 유효성을 검사하여 Virus X가 아닌 앱에서 토큰이 제공되는지 확인합니다. 어떻게 작동하는지 읽고 '원시'프로파일 토큰 대신 사용하십시오.

일반적으로 무기명 유형 토큰은 쿠키와 유사합니다. 사용자가 소유하고있는 경우 원래 소유자와 훔친 사람을 구별 할 수있는 방법이 없습니다. 완화 요소는 토큰을 취소 할 수 있으며 유효 기간이 제한되어 있다는 것입니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 정확히 의미하지는 않습니다. 편집 된 질문 – Addev

+0

편집 된 답변을 참조하십시오. –

1

을받을 것이다 그러나 나는 방법에 대한 다른 튜토리얼/예제를 제공하고 싶습니다 Google 계정을 사용하여 로그인하십시오. Google Play 서비스 및 oAuth2를 사용하여이 게시물 regarding how to verify backend calls을 살펴 보시기 바랍니다. 우리는 몇 주 전에 이것을 구현했고 쉽게 죽었습니다. 이 기술을 사용하면 액세스 토큰을 스푸핑 할 수있는 방법이 없습니다.

1

누군가가 스푸핑 할 수있는 유일한 방법은 man-in-middle 및 DNS 공격입니다. 극단적 인 위반을 예상하지 않는 한 신경 쓰지 마세요. 간단한 보안 대책을 따르는 경우 OAuth 제공 업체 (ID 관리 업무)를 이길 수 없습니다. britzl이 말했듯이 튜토리얼을 따르면 코드가 완성됩니다.