Auth
카카오워크가 Bot 서버로 전달하는 요청을 검증하기 위해 다음과 같은 API를 사용합니다.
표Auth API 리스트| 구분 | API 명 | 설명 |
|---|---|---|
| 공개키 조회 | auth.jwks | Bot 서버로 전달되는 요청의 JWT 검증용 공개키(JWKS) 조회 |
auth.jwks
카카오워크가 Bot 서버로 전달하는 요청을 검증하기 위한 공개키 목록(JSON Web Key Set)을 조회합니다.
카카오워크는 Request URL·Callback URL로 요청(반응형 메시지·Modal)을 전달할 때 Authorization 헤더에 Bearer {JWT} 형식의 토큰을 함께 보냅니다. 이 토큰은 RS256으로 서명되어 있으며, 토큰 헤더의 kid 와 같은 kid 를 가진 공개키로 서명을 검증할 수 있습니다.
- 이 API는 Rate Limit 적용 대상이 아닙니다.
- 공개키는 변경될 수 있으므로, 토큰의
kid와 일치하는 키를 찾지 못하면 이 API를 다시 호출해 키 목록을 갱신하세요.
Request
Request Syntax
코드예제auth.jwks Request Syntax
curl -X GET https://api.kakaowork.com/v1/auth.jwks \
-H "Authorization: Bearer {YOUR_APP_KEY}"
| 메서드 | 요청 URL |
|---|---|
| GET | https://api.kakaowork.com/v1/auth.jwks |
Request Header
Request Header에 대한 상세는 다음과 같습니다.
표auth.jwks Request Header| 파라미터 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| Authorization | String | 필수 |
Bearer {YOUR_APP_KEY}- {YOUR_APP_KEY}: Bot 등록 요청 후에 획득한 인증키(App Key) |
Request Elements
요구하는 파라미터가 없습니다.
Response
Response Syntax
코드예제auth.jwks Response Syntax
{
"success": true,
"keys": [
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"kid": "tiger-ex-v1",
"e": "AQAB",
"n": "zvsr5IeY8aAJ1vSykEKQ..."
}
]
}
Response Elements
Response Elements에 대한 상세는 다음과 같습니다.
표auth.jwks Response Elements| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| success | Boolean | 필수 |
API 호출 실행 결과 - 실패한 경우에도 HTTP 상태 코드는 200이므로 이 값으로 성공 여부를 판단 |
true: 성공, keys 필드와 함께 반환 |
|||
false: 실패, error 필드와 함께 반환 |
|||
| Object[] | 선택 |
공개키 목록(RFC 7517 JWK 형식) - API 호출 성공( true)일 경우 제공 |
|
| kty | String | 필수 |
키 타입. RSA |
| use | String | 필수 |
키 용도. sig(서명 검증) |
| alg | String | 필수 |
서명 알고리즘. RS256 |
| kid | String | 필수 |
키 식별자. 토큰 헤더의 kid 와 비교해 검증에 사용할 키를 선택 |
| e | String | 필수 |
RSA 공개 지수(Base64url) |
| n | String | 필수 |
RSA 모듈러스(Base64url) |
| Object | 선택 |
API 실행 오류 정보 - API 호출 실패( false)일 경우 제공 |
|
| code | String | 필수 |
오류 상황을 구분하는 코드 |
unauthorized: 인증키가 제공되지 않음 |
|||
invalid_authentication: 제공된 인증키가 유효하지 않음 |
|||
expired_authentication: 제공된 인증키가 만료됨 |
|||
api_not_found: 요청 API의 URL 혹은 HTTP 메서드와 다름 |
|||
internal_server_error: 정의되지 않은 서버 오류 발생 |
|||
| message | String | 필수 |
오류 원인에 대한 설명 |