2011-12-04 5 views
2

기존 앱에 위임 된 로그인 시스템을 구축하고자합니다. OAuth 클라이언트 (웹 응용 프로그램)와 OAuth 서버 (간단한 권한 부여 및 리소스 서버)를 구현할 예정입니다.OAuth 2 클라이언트에 실제로 TLS가 필요합니까?

그런 점을 염두에두고 현재 OAuth 2 draft (버전 22)에서 다음 섹션을 건너 온 :

3.1.2.1. Endpoint Request Confidentiality 

    If a redirection request will result in the transmission of an 
    authorization code or access token over an open network (between the 
    resource owner's user-agent and the client), the client SHOULD 
    require the use of a transport-layer security mechanism. 

    Lack of transport-layer security can have a severe impact on the 
    security of the client and the protected resources it is authorized 
    to access. The use of transport-layer security is particularly 
    critical when the authorization process is used as a form of 
    delegated end-user authentication by the client (e.g. third-party 
    sign-in service). 

이 특별히 내가 클라이언트에서 TLS를 사용해야한다고 나에게 경고합니다. 물론 일 경우은 서버에서 HTTPS를 사용하지만 모든 클라이언트에서 HTTPS를 사용하는 것은 불가능하지는 않더라도 어렵습니다.

보안에 대한 제한된 이해에서 누군가가 권한 부여를 훔칠 수 있다고 상상합니다. 이것은 내 질문에 나를 데려옵니다 :

클라이언트 인증을 사용하지 않음 (클라이언트 비밀번호 사용) 도청자가 권한 부여를 사용하지 못하게합니까? (악의적 인 당사자가 클라이언트의 비밀을 알지 못하기 때문에 잘만 알 수 있습니다.)

그렇지 않으면 여기에 또 다른 공격 경로가 표시됩니다.이 작업을 수행하기 위해 할 수있는 일이 있습니까? 클라이언트에 HTTPS없이 안전하게? 예를 들어 OAuth 1이 도움이됩니까? (아마도 추가 요청 토큰 단계가 있기 때문일 수도 있습니다.)

P .: 클라이언트가 TLS 클라이언트 인증서를 사용하여 클라이언트 인증을 수행 할 계획이었습니다.

답변

2

나는이 경고의 일부를 잘못 해석한다고 생각합니다. 이 OAuth 경고는 위반 사례를 해결하기 위해 OWASP A9입니다. 즉, OAuth를 사용 중이더라도 클라이언트와 통신하기 위해서는 보안 전송 계층이 필요합니다. 클라이언트는 인증에 키 쌍이 필요하지 않으며 OAuth는 클라이언트의 인증 형식입니다. 그러나 브라우저는 여전히 쿠키 값으로 저장된 세션 ID를 사용하여 응용 프로그램을 인증합니다. 우려되는 점은 공격자가이 값을 가로 챌 수 있으면 희생 된 클라이언트와 동일한 액세스 권한을 갖게된다는 것입니다.

+0

그렇다면 제대로 이해하면 인증 코드가 명확하게 전달되지만 클라이언트에서 클라이언트로 자원이 명확하게 전달된다는 것이 아닌가? (리소스 서버가 클라이언트 - 서버 연결에서 TLS를 사용하여 개인 데이터를 비공개로 유지하려고 시도했지만 클라이언트가 브라우저 - 클라이언트 연결에서 명확하게 전송하여 위반 한 것으로 나타납니다.) –

+0

@ 쿠키 쿠키가 인증 코드입니다 . HTTP 요청이 일반 텍스트로 전송되면이 트래픽을 볼 수있는 모든 사용자는 웹 응용 프로그램에 액세스해야합니다. 쿠키를 보호하지 않으면 안전하지 않습니다. – rook

+0

나는 우리가 같은 페이지에 있다고 생각하지 않는다. '인증 코드'에 의해,이 스펙은 승인이 부여 된 후 서버가 생성 한 토큰을 의미합니다. 서버는 리디렉션 URI의 쿼리에 첨부하고 사용자 에이전트로 보냅니다. 그런 다음 클라이언트는 리디렉션 요청에서이를 일반 HTTP를 통해 수신합니다. * 아직 * 관련된 쿠키가 없지만 클라이언트가 액세스 토큰을 가져 와서 쿠키에 연결할 수 있습니다. 내 질문은 특히 인증 토큰에 관한 것입니다. 쿠키가 손상되었을 수도 있습니다. –

관련 문제