OAuth 가이드
모든 API 호출은 권한 부여가 필요하며, 권한이 부여된 Ahrefs 사용자를 대신해 수행됩니다. 이를 위해 앱은 해당 사용자의 API 액세스 토큰을 획득해야 합니다.
Ahrefs Connect는 PKCE(Proof Key for Code Exchange)를 사용한 OAuth 2.0 인가 코드 플로우를 사용합니다. 이 과정은 크게 두 단계로 구성됩니다:
1. 애플리케이션 인가
사용자를 다음으로 리디렉션하세요:
https://app.ahrefs.com/web/oauth/authorize?response_type=code&client_id={client_id}&scope=apiv3-integration-apps&redirect_uri={redirect_uri}&code_challenge={code_challenge}&code_challenge_method=s256&state={state}
매개변수:
{client_id}: 계정 설정의 Ahrefs Connect 섹션에서 확인할 수 있는 URL 인코딩된 Client ID입니다.{redirect_uri}: 같은 섹션에 등록한 URL 인코딩된 Redirect URI입니다.{code_challenge}: S256 메서드를 사용해 code verifier에서 파생한 값입니다:- 암호학적으로 안전한 생성기를 사용해 43~128자 길이의 무작위 문자열인 code verifier를 생성합니다. 허용 문자:
[A-Z] [a-z] [0-9] - . _ ~(자세한 내용은 RFC7636 4.1절 참고). - code verifier의 SHA-256 해시를 계산합니다.
- 해시를 Base64 URL 안전 방식으로 인코딩합니다.
- 이 인코딩된 값을
code_challenge로 사용합니다(RFC7636 4.2절 참고).
- 암호학적으로 안전한 생성기를 사용해 43~128자 길이의 무작위 문자열인 code verifier를 생성합니다. 허용 문자:
{state}: 요청과 콜백 간의 상태를 유지하기 위한 불투명한 값을 생성합니다. 인가 서버는 사용자를 앱으로 다시 리디렉션할 때 이 값을 포함합니다. (RFC6749 4.1.1절 참고)
info
레거시 앱 개발자를 위한 참고:
레거시 통합(API v2)과 새로운 Ahrefs Connect(API v3)는 동일한 OAuth 클라이언트를 공유합니다. 즉, Redirect URI도 동일하게 공유합니다. 앱의 구버전과 신버전에 대해 각각 별도의 프로덕션 Redirect URI를 설정할 수 없습니다.
새 앱이 Ahrefs의 검토를 거쳐 활성화되고 출시할 준비가 된 후에만 계정 설정에서 프로덕션 Redirect URI를 업데이트하는 것을 권장합니다.
두 버전 모두에 동일한 Redirect URI를 계속 사용하고 싶다면, {state} 매개변수를 사용해 요청을 구분할 수 있습니다. 예를 들어, 레거시 앱에는 고유한 문자열을 붙이고 새 앱에는 다른 문자열을 붙이세요. 사용자를 앱으로 다시 리디렉션할 때 OAuth 서버가 동일한 {state} 값을 반환하므로, 서버는 이 값을 기준으로 로직을 분기할 수 있습니다. 이렇게 하면 기존 연동을 중단하지 않으면서도 사용자는 두 버전 모두에서 계속 토큰을 생성할 수 있습니다.

사용자 경험:
- 사용자는 Ahrefs 권한 부여 동의 화면을 보게 됩니다.
- 사용자는 자신을 대신해 Ahrefs API에 접근할 수 있도록 앱에 권한을 부여합니다.
- Ahrefs가 다음 정보를 포함해 사용자를 Redirect URI로 리디렉션합니다:
code매개변수 — 2단계에서 사용state매개변수 — 원래 요청과 일치하는지 확인
2. access_token 가져오기
https://ahrefs.com/oauth/token에 POST 요청을 보내 code를 access_token으로 교환하세요.
요청 본문에 매개변수를 전송할 때 application/x-www-form-urlencoded 형식을 사용하세요(RFC6749 섹션 4.1.3 참조):
grant_type:authorization_codeclient_id:{client_id}(1단계의 값과 일치해야 함)redirect_uri:{redirect_uri}(1단계의 값과 일치해야 함)code:{code}(1단계에서 가져옴)code_verifier:{original_code_verifier}(1단계의 변환되지 않은 원본 값)client_secret:{client_secret}(웹 앱 전용 — 계정 설정의 Ahrefs Connect 섹션에서 확인할 수 있습니다. 데스크톱 앱에서는 생략하세요.)
응답 예시:
{
"access_token": "\<API 요청에 사용할 토큰>",
"expires_in": \<액세스 토큰의 유효 기간(초)>,
"token_type": "Bearer",
"scope": "apiv3-integration-apps"
}
토큰 수명 및 재연결
- 리프레시 토큰은 발급되지 않습니다.
- 액세스 토큰은 1년 동안 유효합니다. 만료 후에는 OAuth를 통해 다시 연결(재승인) 해야 합니다.
info
보안 참고:
- 절대 인가 과정 중이든 이후든(UI, 로그, URL, 클라이언트 측 코드 등)
access_token을 최종 사용자에게 노출하지 마세요. - 웹 앱의 경우
client_secret은 서버 측에만 저장하세요. - 승인 절차의 일부로 안전한 토큰 처리 방식을 입증해야 합니다.