문제

REST 및 OAUTH를 사용하여 Rails 앱 (iPhone 앱에서 나오지만 관련이 없음)과 대화하고 있습니다. 그러나 나는 Rails의 CSRF 보호와 관련된 몇 가지 문제를 해결하고 있습니다 ( protects_from_forgery).

CSRF 보호는 정기적 인 양식 제출 (예 : Content-Type = application/x-www-form-urlencoded)에 대해서만 시작된다는 것을 이해하므로 JSON 또는 XML 데이터를 제출하면 괜찮을 것입니다. 불행히도, OAUTH는 현재 Application/X-WWW- 형태 인코딩 요청으로 제한됩니다. 거기에 OAUTH를 비 형식적 인 구역화 데이터로 확장하는 드래프트 사양, 그러나 이것은 지금 나를 도와주지 않습니다.

내가 보는 방식에는 다음 옵션이 있습니다.

  1. OAUTH 서명의 일부가 아니라는 사실을 알고 데이터를 JSON으로 보내십시오. 분명히 매력적인 해결책이 아닙니다.

  2. 특수 레일 행동을 만듭니다 (예 : UsersController#update_oauth) 내부적으로 정기적 인 행동을 위임하는 (예 : UsersController#update). 그런 다음 위조 보호에서 이것들을 제외합니다 (protects_from_forgery :only => [:update]). 이것은 효과가 있어야하며 한두 가지 행동에 대해 경계선이 허용 될 수 있지만 분명히 매우 지저분한 해결책이 될 것입니다.

  3. Oauth 요청을 무시하려면 Rails CSRF 보호를 무시하십시오. 나는 이것을 시도하지 않았지만 후크 중 하나를 바꿀 수 있어야 할 것 같습니다 (아마도 verify_authenticity_token 필터) OAUTH 요청을 고려하여 성공했습니다.

아무도 전에 이것에 빠진 사람이 있습니까? 권장 사항이 있습니까? 아니면 아마도 기본적인 것을 놓치고 있습니까?

도움이 되었습니까?

해결책

내 자신의 질문에 대답하겠습니다. :)

OAUTH 컨트롤러 확장에 다음 방법을 추가했습니다. 이것이 기본 구현 위에 추가되는 유일한 것은 다음과 같습니다. oauth? 확인하다. 이것은 트릭을 수행하는 것처럼 보이며 꽤 깨끗한 솔루션처럼 느껴집니다.

def verify_authenticity_token
  verified_request? || oauth? || raise(ActionController::InvalidAuthenticityToken)      
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top