몇 가지 시나리오는 oauth2 (또는 다른 인증) 시스템을 설계 할 때 액세스 및 새로 고침 토큰의 목적과 엔지니어링 트레이드 오프를 설명하는 데 도움이 될 수 있습니다.
웹앱 시나리오
웹앱 시나리오에는 몇 가지 옵션이 있습니다.
- 자체 세션 관리가있는 경우 세션 상태 서비스의 세션 상태에있는 세션 ID에 대해 access_token 및 refresh_token을 모두 저장하십시오. 사용자가 리소스에 액세스해야하는 페이지가 요청되면 access_token을 사용하고 access_token이 만료 된 경우 refresh_token을 사용하여 새 페이지를 가져 오십시오.
누군가가 세션을 도용한다고 가정 해 봅시다. 가능한 유일한 것은 페이지를 요청하는 것입니다.
- 세션 관리가없는 경우 access_token을 쿠키에 넣고이를 세션으로 사용하십시오. 그런 다음 사용자가 웹 서버에서 페이지를 요청할 때마다 access_token을 보내십시오. 필요한 경우 앱 서버가 access_token을 새로 고칠 수 있습니다.
1과 2 비교
1에서 access_token 및 refresh_token은 권한 부여 서버 (귀하의 경우 Google)와 앱 서버 사이의 경로를 통해서만 이동합니다. 이것은 보안 채널에서 수행됩니다. 해커는 세션을 가로 챌 수 있지만 웹 앱과 만 상호 작용할 수 있습니다. 2에서 해커는 access_token을 가져 와서 사용자가 액세스 권한을 부여한 리소스에 대한 자체 요청을 구성 할 수 있습니다. 해커가 access_token을 보유하더라도 리소스에 액세스 할 수있는 짧은 창만 있습니다.
refresh_token 및 clientid / secret은 서버에만 알려 지므로 웹 브라우저에서 장기간 액세스 할 수 없습니다.
oauth2를 구현하고 액세스 토큰에 시간 초과를 설정했다고 가정 해 봅시다.
1) 짧은 액세스 토큰과 긴 액세스 토큰은 앱 서버에 숨겨져 있기 때문에 큰 차이가 없습니다. 2) 누군가는 브라우저에서 access_token을 가져 와서 오랫동안 사용자의 리소스에 직접 액세스 할 수 있습니다.
모바일 시나리오
모바일에는 내가 아는 몇 가지 시나리오가 있습니다.
장치에 clientid / secret을 저장하고 장치가 사용자의 리소스에 액세스하도록 조정합니다.
백엔드 앱 서버를 사용하여 clientid / secret을 보유하고 오케스트레이션을 수행하십시오. access_token을 일종의 세션 키로 사용하여 클라이언트와 앱 서버간에 전달하십시오.
1과 2 비교
1) 장치에 clientid / secret이 있으면 더 이상 비밀이 아닙니다. 물론 사용자의 허가를 받아 누구나 디 컴파일 한 다음 자신처럼 행동 할 수 있습니다. access_token 및 refresh_token도 메모리에 있으며 손상된 장치에서 액세스 할 수 있습니다. 즉, 사용자가 자격 증명을 제공하지 않고도 앱으로 작동 할 수 있습니다. 이 시나리오에서는 refresh_token이 access_token과 같은 위치에 있기 때문에 access_token의 길이는 해킹 가능성에 영향을 미치지 않습니다. 2) clientid / secret 또는 refresh 토큰이 손상되었습니다. 여기서 access_token 만기 시간은 해커가 사용자 리소스를 얼마나 오래 액세스 할 수 있는지를 결정합니다.
만료 길이
여기서는 access_token 만기 시간이 얼마나되는지에 대해 인증 시스템으로 무엇을 보호하고 있는지에 달려 있습니다. 사용자에게 특히 가치가 있으면 짧아야합니다. 덜 가치있는 것, 더 길 수 있습니다.
Google과 같은 일부 사람들은 refresh_token을 만료하지 않습니다. stackflow와 같은 것들이 있습니다. 만료에 대한 결정은 사용자 편의와 보안 간의 절충입니다. 새로 고침 토큰의 길이는 사용자 반환 길이와 관련이 있습니다. 즉, 새로 고침을 사용자가 앱으로 얼마나 자주 반환하는지 설정합니다. 새로 고침 토큰이 만료되지 않으면 명시 적으로 취소하는 것입니다. 일반적으로 로그온은 취소되지 않습니다.
오히려 길이 게시물이 유용하기를 바랍니다.