2013-05-14 1 views
1

저는 이것을 둘러 보았지만 표준적인 대답을 찾을 수 없습니다. 나는 베스트 프랙티스를 따르려고 노력하고 있습니다. 어쩌면 내가 잘못 생각한 것 같아.BasicAuth/OAuth를 사용하여 APIKey 및 사용자로 개발자 인증

저는 API 사용자를 두 가지 유형으로 생각합니다 : 개발자와 최종 사용자, 별도의 애플리케이션에 별도의 장고 모델 제공.

개발자는 API에 대한 클라이언트를 빌드하고 사용자가 로그인하지 않아도 API의 특정 리소스에 액세스 할 수 있습니다. 액세스를 제한하기 위해 API 키를 등록하고 교환해야합니다. 우리는 Angular 및 iOS 앱을 사용하여 사이트 프론트 엔드를 구축하는 방법을 알려줍니다. 해당 개발자가 API 클라이언트를 작성하면 이미 사용자 계정을 만든 내 사용자는 개발자가 만든 API 클라이언트를 사용하게됩니다. 그 고객의 요청에서 개발자 이름 api_key와 username/password (다이제스트, 우리의 신뢰할 수있는 클라이언트 및 해당 파티 개발자를위한 oauth 토큰)를 기대합니다. 이를 위해서는 1) 개발자가 API 키를 확인하여 API를 사용할 수 있는지 확인하고 2) 최종 사용자를 인증해야하는지 확인해야합니다. 이것은 tastypie에서 가능합니까?

내가 잘못 생각하고 있습니까? 이중 인증은 어떻게합니까?

답변

1

우리는이 정확한 계획으로 생산 사이트를 운영합니다. 물론 자신 만의 튜닝을해야 할 것입니다. 그러나 일반적인 생각은 좋다. OAuth를 가질 수는 있지만 그만한 가치는 없다는 것을 알았습니다. OAuth는 대부분의 경우 너무 복잡합니다.

대략 우리가하는 일을 설명하겠습니다.

  1. 우리는 "응용 프로그램"(아이폰 OS, 안드로이드, BB, 사이트)를 식별 :

    는 앱/개발자 부분입니다. 각 앱에는 ApiClient 인스턴스 모델이 있습니다. ApiClient에는 이름, 공개 키 및 개인 키라는 세 가지 attrs가 있습니다.

  2. 우리는 공개 키와 개인 키를 안전한 채널을 통해 ApiClient 소유자 (앱)와 교환합니다.

  3. 앱은 (hmac를 사용하여) 개인 키로 생성 된 공개 키와 서명을 나타내는 모든 요청을 전송해야합니다.

  4. 우리는 요청을받을 때마다 요청에서 공개 키를 얻고, DB에서 찾아보고, 그것이 속한 응용 프로그램 (이름)을 확인하고 서명을 확인합니다. 모든 것이 정상이면 요청이 수행됩니다. 사용자 인증 부용

:

  1. 우리 (tastypie 의해 제공되는) 다른 모델 apiKey에를 사용하는 사용자를 인증한다. 각 사용자에게는 ApiKey가 있습니다. 그 모델은 독특한 (우리는 무작위로 말할 수 있음) 문자열을 저장합니다. 사용자가 앱에 접속하면 API에 로그인합니다.

    POST/API/V1/로그인/ : 응용 프로그램은이 비슷한 요청을 발행한다 { '사용자 이름': 'XXX', '암호': 'XXX' }

    (하시기 바랍니다

  2. 사용자가 올바른 자격 증명을 제공 한 경우 ApiKey 고유 키가 반환됩니다.

  3. 해당 사용자의 행동에 따라 앱이 요청할 때마다 키를 포함해야합니다. 이것이 각 사용자가 각 작업을 수행하려고 시도하는 방식입니다.

이 마지막 부분의 예 :

  1. 사용자 존은 iOS 앱에 로그인 할. 앱이 요청을 보냅니다
  2. (일반 사용자 이름과 비밀번호를 사용하여) :

    POST/API/V1/로그인/ { '사용자 이름': '존', '암호': '눈' }

  3. 우리는 login API 메소드를 가지고 있습니다. 우리는 사용자가 존재하고 패스가 괜찮은지 확인합니다. 괜찮다고 가정 해 봅시다.

    200 OK { '사용자 이름': '존', '키': '$ (123) $' }

  4. 이 앱은 인증 된 사용자

  5. 우리는 apiKey에 정보를 전송 . 이 자격 증명을 사용해야합니다.

  6. 사용자가 앱에서 어떤 작업을 시도합니다. 그가 앱에서 datetime을 가져 오려고한다고 가정 해 보겠습니다.

    GET/API/V1/날짜/

    인증 : apiKey에 존 : $ (123)를 있다고 $

응용 프로그램은이 요청을 발행합니다. 그것은 최고 안전하지 않습니다. ApiKeys는 무효화되지 않습니다. 그러나 그것은 우리가 자체 내부 Apps를 만들기 때문입니다. 우리가 Tastypie에서 가져온 것들을 빌리는 것이 중요합니다. 이것을 확인하십시오 : http://django-tastypie.readthedocs.org/en/latest/authentication.html#apikeyauthentication

+0

응답을 위해 고맙습니다, 그것은 위생 ​​확인으로 매우 도움이되었습니다. 본질적으로 안전하지 않거나 관리하기 쉽지는 않지만 세션 대신 API 키를 사용합니다. :) – Andres

관련 문제