2017-02-02 10 views
3

oAuth2.0 구현을 사용하는 서버와 상호 작용하고 설명 된대로 Google AppAuth 라이브러리를 사용하는 Android에서 기본 모바일 애플리케이션을 개발 중입니다. here.리다이렉트 URI는 네이티브 모바일 애플리케이션을위한 OAuth 구현시 보안을 제공합니까?

1) 응용 프로그램에 인증 코드/액세스 토큰을 다시 보내는 것 이외에 리디렉션 URI의 목적은 무엇입니까? 승인 요청에 지정된 리다이렉트 URI는 Google API 콘솔에 등록 된 리디렉션 URI와 같아야하므로 Google에 등록 된 애플리케이션과 다른 곳으로 제어가 되돌아가는 것을 보장하는 매체가 될까요?

2) 모바일 응용 프로그램에서 액세스 토큰 및 새로 고침 토큰을 얻고 모바일에 저장하기 때문에 (코드 예제에서와 같이) 누군가가 내 새로 고침 토큰, 클라이언트 ID 및 리디렉션에 대한 내 세부 정보를 확보하면 어떨까요? URI. 누군가 자신의 기기에서 이러한 세부 정보를 사용하여 내 서버에 액세스 할 수 있습니까?

답변

2

1) 응용 프로그램에 인증 코드/액세스 토큰을 다시 보내는 것 이외에 리디렉션 URI의 목적은 무엇입니까?

대부분의 IDP는 코드 및 토큰을 보낼 수있는 위치를 제한하기 위해 특정 클라이언트 ID와 연결된 리디렉션 URI의 화이트리스트를 사용하여 토큰 도용에 대한 첫 번째 방어선을 사용합니다. 이는 https 리다이렉트 URI가 최소한 스푸핑에 대한 몇 가지 기본적인 보호를 제공하는 웹에서 효과적입니다.

매우 최근까지는 https 리디렉션 URI가 기본 응용 프로그램에 적합하지 않았습니다. Android M은 App Links을 도입하여 앱이 다른 악성 앱에 의해 도용 될 수없는 방식으로 https 권한을 요청할 수 있도록합니다. 대체 기술 인 PKCE은 약간 약한 보호 기능을 제공하지만 모든 Android 버전에서 작동합니다. 그러나 PKCE는 권한 엔드 포인트의 지원이 필요합니다.

2) 누군가 내 새로 고침 토큰에 대한 세부 정보를 가져 오는 경우 [...] 누군가 내 서버에서 이러한 세부 정보를 사용하여 내 서버에 액세스 할 수 있습니까?

일반적으로 말해서, 그렇습니다. 토큰이 다른 악의적 인 응용 프로그램으로 유출 된 경우 토큰을 사용하여 액세스 할 수있는 데이터에 액세스 할 수 있습니다. 이와 같은 "무기명 토큰"은 일반적으로 토큰 발급자와 토큰 사용자간에 암호화 된 연결을 통해 해당 토큰을 전송함으로써 비밀로 유지되어야합니다.

token channel binding의 표준 작업이 진행 중인데, 여기서 토큰은 장치의 하드웨어 암호화 모듈에 생성되어 저장되는 비대칭 키 쌍과 함께 사용해야합니다. 그런 모듈에서 개인 키를 훔치는 것은 토큰 자체를 훔치려 고 시도하는 것보다 훨씬 어렵습니다.

현재 우수 사례에 대한 개요는 OAuth2 for Native Apps을 읽는 것이 좋습니다. 앱에서 OAuth2를 사용하려면 OpenID AppAuth 라이브러리를 사용하는 것이 좋습니다. 면책 조항 : 저는 AppAuth의 책임자입니다.