2012-04-05 2 views
2

아마도 내가 불가능한 것을 묻는 중입니다.하지만 API에 대한 클라이언트 요청을 인증하는 방법을 찾으려하지만 일부 클라이언트는 JavaScript 만 사용할 수 있습니다 요청을 보냅니다 (한 줄의 서버 측 코드를 작성할 수없는 호스팅 서비스를 사용함). 즉, API 키, 암호 또는 해시는 JavaScript에서 처리해야하므로 효과적으로 쓸모 없게됩니다.원격 API에 액세스하기위한 JavaScript 전용 클라이언트 보안 설정

난독성이있는 코드를 사용하는 일부 API를 보았지만 제 생각에는 이러한 접근 방식은 JavaScript Beautifier로 쉽게 읽을 수있는 잘못된 보안 감각을 제공합니다. 더 좋은 접근 방법이 있습니까?

미리 답변 해 주셔서 감사합니다.

+1

클라이언트가 일반 인증 프로세스 (물론 https 사용)를 통과하고 세션이 설정된 경우 ajax API 액세스가 안전합니다. 그게 충분하지 않아? – Pointy

+0

@Pointy 문제는 클라이언트가 여전히 인증을 받아야한다는 것입니다. 이는 일반 텍스트로 된 자격 증명 (JavaScript를 통해 다시 한 번)을 전달한다는 의미입니다. 인증에는 사용자 상호 작용이 필요하지 않습니다. – Diego

+0

@Diego 예 처음 읽었을 때 약간의 오해가있었습니다. 사용자가 제공 한 "비밀"이없고 JavaScript가 자동으로 인증되면 사용자가 숨길 수있는 방법이 없습니다. – Pointy

답변

2

아니요, 자바 스크립트가 개방되어 있습니다. 즉, 0 보안을 의미합니다.

가장 현명한 일은 소유하고있는 서버를 통해 API를 프록시 처리 한 다음 사람들이 해당 키를 사용하여 서버에 가입하도록 유도하는 것입니다.

이것은 서버 측 코드가 없어도 서버를 호스팅하기 때문에 괜찮습니다.

+0

예, JavaScript가 열려 있지만 단일 페이지의 모든 JavaScript 사이트도 일반 인증 기술을 사용하여 보안 세션을 설정할 수 있습니다. 물론 이것이 일종의 JSONP라면 보안 정보를 비밀로 유지하는 것이 불가능합니다. – Pointy

+0

@ 사실 사실이지만 서버가 필요하다. 그는 하나도 가지고 있지 않다. – Raynos

+0

아하. 나는 그 첫 단락을 다시 읽었다; 나는 처음에 오해했다. – Pointy

2

JavaScript로이 작업을 완전히 수행 할 수있는 방법이 없습니다. 내가 사용한 유일한 옵션은 IP 주소 또는 의 다른 제한적인 형태의 인증을 사용하여 JavaScript 클라이언트의 경우입니다. 인증/권한 부여가 끝난 후 HTTPS를 통해 비밀 키를 전달합니다.이 비밀 키는 클라이언트에게만 남습니다 (즉, 어디에도 저장되지 않음).

단점은 똑똑하고 악의적 인 사용자가 JavaScript로 쉽게 디버그하여이 키를 확인할 수 있다는 것입니다.

+0

제안 해 주셔서 감사합니다. 불행히도 JavaScript는 클라이언트의 브라우저에서 실행되므로 IP를 예측하고 필터링 할 수는 없습니다. HTTPS와 관련해서는 모든 요청이 JavaScript를 통해 고유하게 전송되므로 누구나 볼 수 있으므로이 경우 도움이되지 않습니다. 확인한대로 JavaScript로만 작업 할 수있는 방법이 없으므로 내 아이디어를 확인할 수 있습니다. – Diego

관련 문제