2012-02-14 2 views
20

현재 작성한 REST API를 사용하여 데이터를 표시하고 상호 작용하는 프런트 엔드로 구성된 웹 응용 프로그램을 현재 개발 중입니다. API를 사용할 수있는 유일한 방법은 프런트 엔드 웹 사이트이고 일부는 개발할 모바일 앱입니다."개인"REST API에 대한 보안

나는 OAuth는이 API를 확보하고 나는 그것이 어떻게 작동하는지에 대해 잘 알고 있어야하기 시작하고이 시점에서 이상적인 메커니즘입니다 방법에 대해 읽는 많은 일을했다.

내 질문입니다 - 나는 결코 타사 클라이언트에 내 API에 대한 액세스 권한을 부여하지하고 있기 때문에, OAuth를 정말 필요한가? 유리한 이유가 있습니까? 또한 백엔드는 단순히 API이기 때문에 사용자가 인증 할 게이트웨이가 없습니다 (Twitter API를 사용하여 앱을 작성하는 경우, 사용자가 인증 할 때 트위터 페이지로 연결되어 액세스 권한을 부여하는 것처럼) 그런 다음 다시 클라이언트로 리다이렉션 됨).

내가. 정말 어떤 방향으로 갈 확실하지 않다가이 상황에 적합 할 중간 HTTP 인증 및 OAuth를 사이에 접근해야하지만 그냥받지 못했습니다 것 같다.

답변

0

2 다리가있는 OAuth가 아마도 당신이 원하는 것일 것입니다. 기본적으로 공유 키를 해시하는 것이지만 코드를 직접 작성하지 않아도된다는 장점이 있습니다. Two-legged OAuth - looking for information

+0

OAuth를 사용하면 어떤 이점이 있습니까? – brandonvvv

+0

직접 인증 코드를 작성할 필요가 없으며 잘 테스트되고 신뢰할 수 있습니다. 2 개의 다리가있는 OAuth를 사용하면 서버와 API 호출자간에 하나의 개인 키 만 공유하면되고, 어떤 스누퍼는 해당 키가 무엇인지 파악할 수 없습니다 (SSL을 통한 연결을 원할 수도 있음) . – jbowes

+0

확인. 그래서 아이디어는 사용자 이름과 암호를 사용하는 API를 통한 로그인과 개인 키를 사용하는 서명을 처리하고 토큰을 부여한 다음 향후 호출을 위해 나머지 세션에 토큰과 서명을 사용합니까? – brandonvvv

0

당신은 API 계층 통신 모바일 장치의 Oauth를 사용한다 :

여기에 관련된 질문입니다.

그러나, 중간 층 접근에 웹 UI 층의 OAuth 더 이익 (기계 시스템)은 없다. 한편

는 토큰 만기가 고통이되는 액세스를 관리하는 몇 가지 잠재적 인 문제

  1. 있다. UI가 클러스터의 여러 노드에 걸쳐 액세스 토큰을 캐시해야한다고 생각하십시오. 만료되면 UI 레이어가 백엔드와 보안 협상을한다는 사실이 잠시 시간이 걸릴 것입니다.

    (V2.0에서와 같이 클라이언트의 OAuth 신임)에서 두 OAuth는
  2. 는 암호화를 지원하지 않는다. 따라서 액세스 토큰을 얻기 위해 서버에 키와 암호를 모두 보내야합니다.

  3. 백엔드는 내 관점에있다 다른 옵션을 통해 OAuth를 선호 시나리오 중 하나에서 상당한 이익을

1

없이, 등 액세스 토큰의 유효성을 검사, 토큰을 새로 고침, 액세스 토큰을 발행 구현해야 귀하 또는 제 3자가 개발했는지 여부와 상관없이 신뢰할 수없는 고객과 협력하십시오. 신뢰할 수없는 클라이언트는

무엇입니까? API에 대한 액세스 권한을 부여하는 자격 증명을 누가 처리하는지 확인하십시오.

  • 예를 들어, 웹 응용 프로그램이 falvors에 API와 상호 작용할 수 : 귀하의 API에

    1. 귀하의 웹 응용 프로그램 서버 측 회담.API에 액세스하는 자격 증명은 서버에 액세스 할 수있는 사용자 만 액세스 할 수 있으므로 웹 응용 프로그램 서버는 신뢰할 수있는 클라이언트입니다 ... 귀하와 팀. client_id 및 client_secret를 사용하여 웹 응용 프로그램 서버를 인증 할 수 있습니다.
    2. 자바 스크립트를 사용하여 최종 사용자의 브라우저에서 실행되는 웹 응용 프로그램 클라이언트에서 직접 API로 전화를 걸 수 있습니다. 최종 사용자의 브라우저는 신뢰할 수없는 클라이언트입니다. API에 대한 자격 증명을 브라우저에 전달하면 누구든지 JavaScript 코드를 확인하고 자격 증명을 훔칠 수 있습니다.
  • 타사 네이티브 응용 프로그램도 신뢰할 수 없습니다. API를 사용하는 악의적 인 개발자가 플랫폼의 자격 증명과 최종 사용자를 저장할 수 있습니다.

  • 네이티브 앱은 신뢰할 수있는 클라이언트이며 간단한 사용자 이름, 비밀번호 및 앱을 식별하는 클라이언트 ID로 인증을 관리 할 수 ​​있습니다.

방법의 OAuth 도와 드릴까요? OAuth Authorization codeImplicit 교부금으로이 문제를 해결할 수 있습니다. 이러한 흐름은 브라우저와 같이 리디렉션을 지원하는 클라이언트에서만 작동합니다. 또한 자격 증명을 공개하지 않고 신뢰할 수없는 클라이언트와 사용자를 권한 서버에서 인증하여 리소스 서버, 즉 API에 액세스 할 수 있습니다. 완료 방법을 보려면 RFC을 살펴보십시오.

OAuth의 좋은 점은 이러한 리디렉션 기반 인증 흐름을 지원할뿐만 아니라 클라이언트 자격 증명 부여 및 사용자 자격 증명 부여도 지원한다는 것입니다. 따라서 OAuth 인증 서버는 모든 사례를 처리합니다.

1

OAuth 2.0은 원래 많은 것을 만들지는 않는다고 생각하면 PITA처럼 보이지만 대부분의 언어에는 다양한 OAuth 2.0 설정이 있습니다. 다양한 OAuth 2.0 설정을 사용할 수 있습니다. Laravel이나 RoR과 같은 프레임 워크를 사용한다면 거의 모든 작업이 가능합니다.

게시물에 제안 당신은 약 2 이야기 다른 의견과 답변을 무시하고 사용자를 리디렉션하지 않으려면 legged flow. client_credentials 부여 유형을 사용하면 앱이 액세스 토큰에 대한 대가로 자신의 클라이언트 ID와 비밀 정보를 제공하도록 할 수 있습니다. 이는 쉽고 간단합니다.

내가 개인적으로 이야기하는 방식을 묻는 질문은 시스템에서 이야기하는 유일한 시스템이 백엔드 내부에 있고 외부 세계와 상호 작용하지 않는 경우 공개 상태로두면 네트워크를 안전하게 유지할 수 있기 때문입니다. (VPN/방화벽).

하지만 "우리 iPhone 앱에서 사용하는"의미에서 개인적인 것이라면 OAuth 2.0 또는 이와 비슷한 것을 사용하고 싶을 것입니다.