애플리케이션 프로그래밍 인터페이스(application programming interface, API) 키는 API에 접근하는 사용자, 개발자 또는 호출 프로그램을 인증하고 허가하는 데 사용되는 비밀 고유 식별자이다.
구글 클라우드 플랫폼이나 아마존 웹 서비스와 같은 클라우드 컴퓨팅 제공업체는 API 키를 인간 사용자가 아닌 프로젝트를 인증하는 데에만 사용할 것을 권장한다.
HTTP 기반 API를 위한 API 키는 여러 방식으로 전송될 수 있다.
액세스 토큰은 흔히 HTTP 인증 헤더에 포함되는 JSON 웹 토큰(JWT) 형식이다.
POST /something HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
쿼리 문자열에 포함되는 경우:
POST /something?api_key=abcdef12345 HTTP/1.1
요청 헤더로 전송되는 경우:
GET /something HTTP/1.1
X-API-Key: abcdef12345
HTTP 쿠키로 전송되는 경우:
GET /something HTTP/1.1
Cookie: X-API-KEY=abcdef12345
API 키는 일반적으로 안전하다고 간주되지 않는다. 보통 클라이언트가 접근할 수 있어 누군가 API 키를 탈취하기 쉽기 때문이다. 키는 만료 기한이 없는 경우가 많아, 한 번 탈취되면 취소하거나 재생성하지 않는 한 무기한으로 사용될 수 있다. 키는 클라이언트와 서버만이 알고 있는 비밀이어야 하므로 보안되지 않은 채널을 통해 전송되어서는 안 되며, HTTPS와 같은 다른 보안 메커니즘과 함께 사용될 때만 안전하다고 간주될 수 있다.
API 키 사용 시 다음과 같은 여러 위험 시나리오가 존재한다.
이러한 위험은 일반적으로 키가 평문으로 존재하여 공격자가 접근할 수 있다는 점에 기인한다.
2017년, 델라웨어에 본사를 둔 보안 회사 Fallible은 16,000개의 안드로이드 앱을 조사하여 드롭박스, Twitter, 슬랙과 같은 서비스의 API 키가 하드 코딩된 앱 300개 이상을 식별하였다.