2009-08-10 2 views
6

저는 지금까지 우리가 몇 가지 동반 응용 프로그램을 위해 내부적으로 개발 한 웹 응용 프로그램 용 REST API를 개발 중입니다. 이제 외부 개발자에게 공개하기 위해 요청을 작성한 사람을 식별하고 일반적으로 요청을 관리하는 데 도움이되도록 API에 토큰을 추가하려고합니다. 이 시점에서 API에 대한 사용자 인증을 위해 https 및 기본 인증을 사용하고 있습니다.웹 API 토큰 체계에 대한 좋은 접근 방법은 무엇입니까?

우리가 논의한 토큰 체계는 각 개발자가 하나 이상의 토큰을 할당 받고 이러한 토큰이 각 요청과 함께 매개 변수로 전달되는 매우 간단합니다.

제 질문은 당신이 이전에 어떻게했는지 (당신은 당신이 많든 적든, 보안을 어떻게 처리했는지 등) 비슷한 것을했는지, 그리고 권장 사항이 있습니까?

감사합니다.

+0

관심있는 모든 분들께, OAuth가없는 안전한 REST API로 이동하는 방법에 대한 기사를 작성했습니다. http://www.thebuzzmedia.com/designing-a-secure-rest-api-without- oauth-authentication/ 문제는 공격 벡터 및 사용자를 가장 한 사용자를 식별하는 데 문제가 있습니다 (고유 토큰 등). 체크섬 또는 "HMAC"가 필요한 HTTP를 통해 - 클라이언트와 서버 만 알고있는 비밀 키로 요청의 모든 값에 서명합니다. HTTPS를 통해 훨씬 쉽게, 간단한 토큰이 잘 작동합니다. –

답변

6

먼저, http://OAuth.net을 보길 원할 것입니다. 유스 케이스에 따라 필요한 보안을 제공 할 수 있습니다.

토큰과 관련하여 OAuth를 포함한 대부분의 프로토콜에 대한 BLOB입니다. 필요한 정보를 원하는 형식으로 입력 할 수 있습니다.

여기

우리가하는 일입니다

  1. 먼저 우리는 각 개발자 관련된 비밀을 가진 키를 할당합니다.
  2. 토큰 자체는 암호화 된 이름 - 값 쌍입니다. 우리는 username, expiry, session id, roles 등을 입력합니다. 우리 자신의 비밀로 암호화되어 아무도 만들 수 없습니다.
  3. 웹 API와 함께 사용하기 쉽도록 Google은 URL 안전 버전의 Base64를 사용하므로 토큰은 항상 URL 안전입니다.

희망 하시겠습니까?

2

요청이 유효한 시간을 제한 할 수있는 시간 기반 토큰을 추가하는 것에 대해 생각해보십시오. 이것은 재생 공격을 시도하는 사람에게 도움이됩니다.

위의 developerKey를 기반으로 유효한 토큰을 얻거나 할당하려면 핸드 셰이크 호출이 필요합니다. 이 토큰은 로컬에 저장되어 호출자에게 다시 전달됩니다.

그러면 개발자는 요청과 개발자의 유효성을 검사하기 위해이 키를 사용합니다.

예를 들어 해당 키를 5 분 또는 10 개의 요청 또는 사용자가 정의한대로 사용할 수 있습니다. 그 시점 이후에 생성 된 시간 기반 토큰은 유효한 목록에서 제거되고 더 이상 사용할 수 없습니다. 개발자는 새로운 토큰을 요구해야합니다.

1

UUID는 일시적인 무작위 키에 매우 유용합니다. 예측할 수없고 생성 속도가 빠르지 만 충돌은 매우 드물기 때문에 실제로는 고유합니다. 좋은 세션 키도 만드십시오.

관련 문제