2013-06-11 3 views
4

저는 Sinatra를 사용하여 RESTful JSON 데이터 API를 개발하고 HTML5/JS 앱에서 해당 데이터 API를 사용하도록했습니다. 분명히 데이터 API는 사용자 조가 API를 통해 자신의 물건에만 액세스 할 수 있도록 인증 양식을 필요로합니다. 내 자신의 인증을 굴릴 수 없으면 대신 Google/Facebook/Twitter에 의존하여 ID 제공 업체가 될 수 있습니다.단일 페이지 JS 앱용 REST API 보안?

나는 OAuth2를가 Omniauth을 사용하고 내가 그까지 기존의 웹 애플 리케이션을위한 충분히 쉽게,하지만 FB/트위터/구글을 사용하여 JSON API를 확보에 대해 이야기 할 때, 나의 이해가 고장을 연결할 수 있습니다으로 검토 한 이유는

  • API가 실제로 OAuth2 흐름의 리디렉션을 수행하는 것이 아닙니다.
  • 아이덴티티 프로 바이더의 콜백 데이터가 나오면 아마 HTML/JS 앱을 친 것입니다. 맞습니까?

타사 개발자에게 비 웹 메커니즘을 통한 API 액세스를 제공하려는 경우 더 큰 문제가 될 수 있습니다. OAuth2 리디렉션 흐름 비즈니스는 분명히 여기에서 작동하지 않습니다.

    :

    [ HTML/JS client ] --- [ JSON API ]  [ FB/Twitter/Google ] 
              | 
              | 
             [ Developer ] 
    

    이 실제로 어떤 난 후 것은 이것은 단지 레일입니다 제외하고, 여기에 무엇 :

    그래서 모든 나는이처럼 보이는 구조를 가질 것, 말

  • sso-devise-omniauth-provider

Sinatra에서 이것을 수행하기위한 지침이 있습니까? 몇 가지 구체적인 예를 사용하십시오.

+0

수행 한 작업과 중단 한 작업을 기록하십시오. 단순히 Sso-devise-omniauh-provider를 Sinatra에 통합하는 방법을 묻는 것만으로는 충분하지 않습니다. – andih

답변

0

글쎄, 당신은 구석에 자신을 그린 것처럼 보입니다. OAuth 인증의 한 가지 전제는 HTTP 클라이언트 (예 : 웹 브라우저)에서 OAuth 공급자를 인증하기 위해 조치를 취할 사용자가 있다는 것입니다. 비 웹 메커니즘을 통해 타사 개발자 API 액세스를 제공하려는 경우 해당 종류의 인증 흐름을 사용할 수 없습니다.

대화 형 웹 기반 인증 패턴을 적용 할 수없는 API 클라이언트를 인증하려면 API 키 패턴을 따라야합니다. 어떻게 든 API 키를 생성하고 공인 된 타사 개발자에게 넘길 필요가 있습니다. Twitter, Facebook 및 Google이 어떻게 작동하는지보십시오.

+0

나는 이것이 정확하다고 생각하지 않는다. OAuth에는 사용자가 웹 브라우저에서 작업을 수행하지 않는 흐름이 있습니다. 토큰에 대한 키/비밀 교환과 관련된 "2-legged"OAuth 플로우를 살펴보십시오. –

+0

@BenLakey 예, OAuth에는 사용자가 조치를 취하지 않아도되는 흐름이 있지만 이러한 흐름은 API 요청을 한 사용자가 자신이 말하는 사람인지를 확인하지 않습니다. Sinatra 서버가 Google에 계정을 설정하고 사용자 데이터를 저장할 수는 있지만 2 족식 흐름은 Sinatra App의 API 호출자가 자신이 주장하는 사용자임을 확인하지 않습니다. –

+0

그래, 내 말은, 분명히 특정 토큰이 특정 사용자를위한 것인지 확인해야 할 것입니다. 그러나 이전에 사용자가 Google/Facebook/Twitter를 사용하여 표준 3- 다리가있는 OAuth. 링크 된 솔루션을보고 내가 무엇을 얻고 있는지 알아 봅니다 (레일즈의 경우이지만 Sinatra에 관심이 있습니다). –