2016-06-20 6 views
0

클라이언트에서 사용할 API 서비스를 만들려고합니다. API는 내 고객의 웹 사이트를 사용하여 고객에게 표시 될 데이터를 반환합니다. API는 사용자 데이터를 필요로하지 않습니다.api authentication with node.js

API 키를 사용하여 관련 데이터를 반환하려고 생각했습니다. 하지만 내 고객 웹 사이트를 사용하는 고객 만이 API에 액세스 할 수 있어야합니다.

제 질문은 프런트 엔드에서 API를 사용하고 API 키를 공개하면 누구나 브라우저에서 API를 사용할 수 있습니다. 나는 그런 일이 일어나기를 원하지 않는다. 어떻게 인증합니까? 그게 작동하지 않으면 내 서버에서 클라이언트 서버로 API를 사용할 수 있습니까? 그럼에도 불구하고 서버를 어떻게 인증합니까?

저는 nodejs를 사용하고 있으며 백엔드에서 표현하고 있습니다. 어떤 아이디어? 감사!

답변

0

사용자 인증없이 공개 된 API 인 경우 API에 대한 액세스를 제한 할 수있는 방법이 없습니다.
리퍼러를 확인하거나 특수 토큰을 만드는 것과 같은 여러 가지 해결 방법이 있지만 클라이언트 측에 모두 저장되며 악의적 인 사용자가이를 다시 사용할 수 있습니다.

일반적으로 모두 의미가 없습니다. 이미 API를 고객에게 노출했습니다. 작동하는 알고리즘을 만들더라도 악의적 인 요인은 웹 사이트 JavaScript 메서드를 실행하여 작동시킬 수 있습니다. 무엇부터 보호하려고합니까?

API에 대한 액세스를 제한하는 경우 가장 적절하고 효율적인 방법은이 API 백엔드를 사용하여 서버 측 웹 클라이언트 만 액세스 할 수 있도록하는 것입니다.

+0

감사합니다. 그건 의미가 있습니다. 클라이언트 측에서 API 백엔드를 만들지 만 올바른 서버에서 요청이 오는지 인증하는 방법을 알고 있습니까? 나는 우리가 api key를 노출시키지 않고 단지 확신한다는 것을 안다. – prdtuty

+0

@prdtuty 서버 측 접근법을 사용하고 서버가 일종의 내부 네트워크에있는 경우 IP 필터링, 라우팅, 인증서와 같은 기본 제한 규칙을 적용하면됩니다. 일반적으로 IP 필터링만으로 충분합니다. 192.168.0.1이고 192.168.0.2에 백엔드 API가 있으며이 포트는 192.168.0.1에서만 사용할 수있는 단일 포트 (예 : 80) 만 있습니다. –

+0

요청한 서버가 내부에 있지 않습니다. 이 상황에서 CORS를 활성화해야한다고 생각합니까? – prdtuty

1

이것은 까다로운 작업입니다. 본질적으로 공개 API를 제한합니다. 하루가 끝나면 웹 페이지는 로컬 컴퓨터의 사용자 브라우저에 표시됩니다. 따라서 브라우저에서 액세스 할 수 있으면 수동으로 액세스 할 수도 있습니다. API 키가 실제로는 가장 좋은 접근 방법이지만 액세스 제어 이상의 것을 방지하는 역할 만합니다. 거의 모든 액세스 제어 유형을 브라우저에 넣으면 불행히도 브라우저 외부에서 모방 할 수 있습니다.

사용자가 로그인하는 경로를 어느 정도 확장하려면 json web tokens (jwt)을 조사해야합니다. 이것은 사용자 수준에있을 필요는 없으며 원하는 경우 일종의 세션 수준 일 수 있습니다. 그러나 이것은 api에 직접 액세스하는 사용자를 제한하지 않습니다.