Google cloud api를 이용하는 앱을 작성 중 문제가 생겼다. 클라이언트 라이브러리를 이용한 호출이 예상 외로 잘 되지 않아 REST API를 이용하려고 하였으나, 401 Unauthorized를 반환하면서 API가 제대로 작동하지 않았다.
구글 클라우드 API를 호출하는 방법도 여러 가지가 있고, 그리고 여기에 인증을 하는 방법도 여러 가지가 있는데, 어째서인지 이게 혼용이 잘 안 되는 거 같다.
AI vision 문서를 잘 보면
POST https://vision.googleapis.com/v1/images:annotate
를 보낼 때, curl을 다음과 같이 작성하라고 한다:
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://vision.googleapis.com/v1/images:annotate
여기서는 POST Header에 access-token을 넣어주는 방식으로 인증하는데, 이건 API키와 다른 값이다. 이걸 혼동하면 안 된다. API 키를 이용하여 인증하려면, POST URL에 파라미터 형식으로 넣어 주어야 한다.
즉, 헤더를 주지 않고 https://vision.googleapis.com/v1/images:annotate?key=<your-key>
따위의 형태로 리퀘스트를 하여야 한다는 뜻이다.