2014-09-21 1 views
1

OAuth에 대해 자세히 알아 보려면 OAuth 2.0 제공 업체와 소비자를 작성하려고합니다.OAuth 소비자가 각 요청에 대해 OAuth 제공 업체의 무기명 토큰을 확인합니까?

저는 Doorkeeper Gem을 제공 업체에 대한 참고 자료로 사용하고 있지만 직접 작성하고 싶습니다.

제 질문은 무기명 토큰과 관련된 사양의 Section 1.3에있는 마지막 글 머리 기호입니다.

(F) 리소스 서버는 액세스 토큰의 유효성을 검사하고 유효하다면 이 요청을 처리합니다. 액세스 토큰의 고유 한 로컬에 저장된 사본과 그 만료에 대한

  • 검사 액세스 토큰이
  • 는 공급자 서버에 요청을 :

    이 시나리오에서는

The resource server validates the access token는 것을 의미 하는가 유효한/유효하지 않은 응답을 반환하는? 이 프로토콜의 작업에 영향을주지 않습니다 구현 세부 사항이기 때문에

  • 는 완전히
  • 답변

    2

    이 규격은 그 질문에 대답하지 않는 다른 작업을 수행. 그럼에도 불구하고 보안에 영향을 미칠 수있는 좋은 질문입니다.

    우선, 일부 구현에서는 자원 서버와 권한 서버가 하나의 단일 엔티티의 두 가지 역할에 불과하다는 것을 알아야합니다. OAuth는 2.0 사양 (RFC 6749)로서

    그것을 둔다 :

    인증 서버와 리소스 서버 간의 상호 작용은 본 명세서의 범위를 벗어난다. 권한 서버 은 자원 서버 또는 별도의 엔티티와 동일한 서버 일 수 있습니다.

    그들은 둘 다 단일 웹 사이트에 존재할 수 있습니다. 아마 그들은 두 개의 서로 다른 웹 사이트이지만 두 데이터베이스 모두 동일한 데이터베이스에 연결되어 있습니다. 그러면 자원 서 v는 권한 서 v와 함 2 데이터베이스에서 토큰을 찾을 수 있습니다.

    인증 서버와 통신해야하는 것보다 자원 서버가 권한 서버의 데이터베이스를 읽을 수없는 경우 (가능한 경우에도 데이터베이스를 직접 읽지 않는 것이 좋습니다).

    정확한 통신 설정 및 보안은 사용자에게 달려 있지만 HTTPS REST 요청은 많은 의미가 있습니다. 많은 구현에는 다른 메커니즘이 있습니다. 예를 들어 OAuth-2.0 resource servers token validation in distributed environment을 참조하십시오.

    분명히 액세스 토큰이 처음 리소스 서버에 제공되면 리소스 서버는 이에 대해 알지 못하고 유효성을 검사하기 위해 권한 부여 서버에 액세스해야합니다. 지금 흥미로운 질문은 : 리소스 서버가이 응답을 캐시 할 수 있습니까? 아니면 모든 요청에 ​​대해 호출을해야합니까?

    리소스 서버가 디자인을 결정하게되며, 다양한 요인에 의해 영향을받을 수 있습니다.예 :

    • 인증 서버가 매우 빠르게 응답하는 경우 자원 서버가 응답을 캐시 할 필요가 없습니다. 사실, 잘못 설계된 캐시는 캐싱하지 않는 것보다 느려질 수 있습니다.
    • 좋은 캐시 정책을 사용하여 캐시를 설계 및 구현해야 리소스 서버에 양호한 캐시를 구현할 수 없습니다.
    • 리소스 서버의 성격과 규모에 따라 리소스 서버에 양호한 캐시를 구현하기 위해 디스크에 RAM 또는 저장소를 캐시에 할당하는 비용이 금지 될 수 있습니다. 이것은 특히 거기에 액세스 토큰의 수가 매우 높고 합리적인 캐시 적중률을 얻으려면 많은 저장 공간이 필요한 경우에 특히 그렇습니다.
    • 권한 서버에서 권한 토큰이 취소 된 경우에도 리소스 서버가 액세스 토큰을 수락 할 준비가 되었습니까?

    마지막 사항에 대한 자세한 설명이 필요합니다. 권한 서 v에는 일] 적으로 토큰을 취소하는 몇 가지 메커니즘이 있습니다. 자원 소유자가 UI를 통해 권한을 취소하면 권한 서버는 해당 권한 (토큰 액세스 및 새로 고치기 토큰)을 통해 얻은 모든 토큰을 무효화해야합니다. 자원 서버는 토큰 취소 엔드 포인트 (implicit grant를 사용하는 공용 클라이언트에서 "로그 아웃"메커니즘으로 자주 사용됨)를 구현할 수도 있습니다.

    토큰을 승인 할 위험이 있으므로 리소스 서버가 해지 된 후에도 준비가되어 있습니까? 그렇다면 얼마 동안? 그럴 경우 토큰을 캐시 할 수 있습니다. 그렇지 않으면 토큰을 캐시 할 수 없습니다. 처음에는 리소스 서버가 캐싱 된 토큰 유효성 검사 응답을 사용하지 않아야한다고 말할 것입니다. 그러나 경우에 따라 위험을 능가하는 성능 이점이있을 수 있습니다. 또한 리소스 서버에 저장된 리소스의 성격과 리소스 서버와 관련된 실제 위험도에 따라 달라집니다.

    다시 말하지만 이것은 우리가 설계 할 수없는 결정입니다. 보안 관점에서 리소스 서버에 유효성 검사 응답을 캐시해서는 안됩니다.

    +0

    좋은 답변입니다. 약간의 추가 : 인증 서버가 JWS 토큰을 발행하면 자원 서버는 인증 서버를 참조하지 않고도 토큰 서명을 확인하고 토큰 세부 사항을 추출하고 토큰을 검증 할 수 있습니다. –

    +0

    @ ZólyomiIstván True. 그러나이 경우 토큰이 취소되었는지 여부와 토큰을 제공 한 이후에 변경된 내용이 있는지 여부는 알 수 없습니다. 예를 들어 토큰에 사용자 역할이 있다고 가정합니다. 이제 관리자는 더 이상 일부 리소스에 액세스 할 수 없다는 귀하의 역할 중 일부를 제거합니다. JWS (또는 SAML 또는 ...) 토큰에서 역할을 사용하는 경우 사용자는 알지 못하고 사용자는 가질 수없는 역할을 계속 사용할 수 있습니다. 데이터 운반 토큰 사용은 캐시와 매우 유사합니다. 보안 관점에서 보면 안됩니다. –

    +0

    맞아요, 그것은 캐싱의 형태이며 보안이 고려되어야하며 매우 짧은 생명 토큰과 함께 사용해야합니다. 유효성 검사가 권한 서버를 전혀 참조하지 않아도되는 누락 된 세부 사항을 지적하고자했습니다. –

    관련 문제