입력 장치가 불편할 때 쓰는 로그인 흐름

기기 코드 로그인에서 대기·느린 폴링·만료 상태와 별도 화면의 계정·권한 확인을 구분한 개념도

스마트 TV나 키오스크처럼 키보드로 비밀번호를 입력하기 어려운 기기에서는 화면에 짧은 코드를 보여 주고, 사용자가 휴대전화나 컴퓨터에서 별도로 승인하는 방식이 유용하다. OAuth 2.0 Device Authorization Grant는 이 절차를 표준화한다. 기기는 인증 서버에서 device_code와 사용자에게 보여 줄 user_code, 방문 주소, 만료 시간과 폴링 간격을 받는다. 사용자는 자신의 브라우저에서 해당 주소를 열고 코드를 입력한 다음 계정을 확인한다. 기기는 토큰 엔드포인트에 간헐적으로 상태를 물어 승인 완료를 확인한다. RFC 8628 §§3.1–3.5

이 흐름은 화면이 작은 기기의 입력 문제를 해결하지만, 화면에 표시된 코드가 곧 기기나 주변 사람의 신원을 증명하는 것은 아니다. 코드는 승인 요청을 서로 연결하는 임시 자격 정보다. 따라서 “코드를 알려 주면 로그인할 수 있다”는 구조의 위험과 만료·폴링 규칙을 함께 설계해야 한다.

폴링은 서버가 준 간격을 지킨다

초기 토큰 응답의 interval은 클라이언트가 폴링 사이에 기다려야 하는 최소 초 단위 간격이다. 응답에 값이 없으면 표준의 기본 간격 규칙을 따른다. 승인 전 authorization_pending을 받았다고 즉시 반복 요청해서는 안 된다. 서버가 slow_down을 돌려주면 표준은 폴링 간격을 5초 늘리고, 이후 요청에도 증가한 간격을 유지하도록 요구한다. 이 동작은 서버의 처리량을 보호하고, 클라이언트 구현마다 임의로 재시도 폭주를 만드는 일을 막는다.

device_code와 user_code에는 각각 임시 사용 기간이 있다. 코드는 성공, 만료, 취소 같은 종료 상태에 도달하면 더는 유효한 것처럼 취급하지 않아야 한다. 네트워크 시간 초과와 authorization_pending은 서로 다른 상태다. 시간 초과는 서버가 어떤 응답을 만들었는지 모르는 통신 실패이므로, 오류 응답을 받은 것처럼 상태를 단정하지 말고 제한된 재시도 정책으로 처리한다. 반면 slow_down은 명시적 프로토콜 신호이므로 간격을 즉시 조정한다.

사용자가 확인해야 할 화면을 보여 준다

기기 화면에는 어디에서 코드를 입력해야 하는지 공식 도메인과 함께 표시하고, 코드 입력 후 휴대전화에서 어떤 계정과 권한을 승인하는지 다시 확인하도록 안내한다. 사용자는 로그인하려던 기기의 이름이나 요청 맥락을 확인할 수 있어야 한다. 알 수 없는 사람이 전화나 채팅으로 코드를 요구한다면 전달하지 말아야 한다. 공격자는 사용자가 자신의 계정으로 공격자 기기를 승인하도록 유도할 수 있다. 브라우저 주소를 직접 입력하거나 서버가 제공한 공식 확인 링크를 이용하고, 광고나 임의의 검색 결과에 나온 로그인 페이지를 신뢰하지 않는 편이 안전하다.

코드는 화면을 보는 사람에게 노출될 수 있으므로 짧은 만료, 충분한 무작위성, 입력 시도 제한이 중요하다. 서버는 사용자 코드 추측을 막도록 요청 속도를 제한해야 하며, 코드가 유효하지 않을 때 응답 차이로 다른 사용자의 활성 코드 여부를 쉽게 알아내지 못하게 해야 한다. 표준은 이러한 위협을 별도 보안 고려사항으로 다루지만, 운영 환경의 위험과 통제 강도는 서비스가 평가해야 한다.

전문가 자료가 보여 주는 구현 범위

Microsoft identity platform 문서는 같은 프로토콜을 제품 API에서 어떻게 사용하는지 보여 주는 실무 자료다. 문서에는 기기 코드 요청 뒤 반환되는 사용자 코드·확인 URI·만료 시간·폴링 간격과 토큰 요청의 authorization_pending, slow_down 처리가 설명돼 있다. 또한 사용자가 로그인할 준비가 되었을 때 흐름을 시작하라고 안내한다. 이는 Microsoft 플랫폼 구현 문서의 동작과 권고이며, 모든 OAuth 서버가 동일한 만료 시간이나 제품별 응답을 제공한다는 뜻은 아니다. RFC 8628은 상호 운용을 위한 규범이고, 제공자 문서는 해당 플랫폼의 사용법이다. 둘을 함께 읽으면 앱은 표준 상태 기계를 따르면서도 실제 응답 필드와 제품 한계를 별도로 확인할 수 있다.

출처