2014-11-20 4 views
1

사용자가 사진을 업로드 할 수있는 응용 프로그램을 개발 중입니다. 이 사진을 저장하기 위해 Google 클라우드 서비스를 사용하고 싶습니다. 데이터베이스의 각 이미지에 대해 고유 한 GUID를 만들고 해당 이름의 클라우드에 이미지를 저장하려고합니다. 나에게 GUID에 대한 아약스 요청을 한 다음 이미지를 동일한 페이지에서 Google 클라우드 서비스로 직접 업로드하는 것이 좋습니다. 이 예에 도시Google 클라우드 저장소는 API 키를 노출해도 괜찮습니까?

https://github.com/GoogleCloudPlatform/storage-getting-started-javascript/blob/master/index.html

추천.

내 첫 번째 질문은 내 백 엔드 (C# 코드)로 보내야하고 거기에서 업로드해야합니까? 아니면 올바른 접근 방법입니까?

이것이 올바른 접근 방법이라면 자바 스크립트에서 내 세부 정보를 노출시키지 않고 다른 사람이 내 응용 프로그램 외부에서 업로드 할 수 있도록 허용할까요?

답변

3

API 키는 그 자체로 호출이 청구 목적으로 특정 프로젝트와 연결되어 있음을 나타냅니다. 익명 호출에만 필요합니다. API 키는 이 아니며은 모든 종류의 승인을 부여합니다. 프로젝트의 버킷에 프로젝트 멤버 만 볼 수있는 객체가있는 경우 API 키는 누구에게도 권한을 부여하지 않습니다.

그렇다면 API 키를 공유 할 수 있다면 공유하는 것이 좋지 않으며 공유해야하는 경우 가능한 한 많이 잠글 수 있습니다. API 키는 특정 웹 참조 자 (예 : www.yoursite.com의 자바 스크립트 클라이언트에서만 작동) 또는 특정 iPhone 또는 Android 앱에서 실행될 때만 특정 IP 주소와 함께 사용하도록 제한 될 수 있습니다. 이러한주의 사항은 암호로 보호되지 않습니다 (해커가 리퍼러 헤더를 스푸핑 할 수있는 이유는 없습니다).하지만 웹 앱을 사용할 수 있도록 API 키를 붙여 넣기를 원하는 다른 사람에게는 유용하지 않습니다. 직접 지불하지 않으려 고합니다.

응용 프로그램에서 javascript 클라이언트의 접근 방식을 사용할 때의 문제점은 개인 사용자가 개체를 완전히 익명으로 업로드하거나 자신의 Google 계정으로 업로드 할 수 있다는 것입니다. 익명 옵션을 사용하면 기본적으로 익명 쓰기를 사용하는 버킷을 만들 것을 요구하기 때문에 훌륭한 것은 아닙니다. 그렇게하지 않으려는 경우입니다.

사용자가 서명 한 URL을 사용하여 사진을 업로드 할 수있는 좋은 방법이 있습니다. 서명 된 URL을 사용하면 서버가 자격 증명을 사용하여 개체를 업로드하라는 요청에 안전하게 서명 할 수 있습니다. 익명의 최종 사용자가 버킷에 개체를 안전하게 업로드 할 수있는 최선의 방법입니다.

서명 된 URL의 문서 : https://cloud.google.com/storage/docs/accesscontrol#Signed-URLs

관련 문제