2012-02-23 4 views
1

인증을 위해 OAuth 2.0을 사용하고 인증을 위해 OpenID 2.0을 사용하는 다음과 같은 분산 시스템을 고려하십시오. 에 "인증 서버는 그대로OAuth 2.0을 사용하여 여러 자원 서버를 보호하는 방법은 무엇입니까?

  1. RS1, RS2와 RS3는"자원 서버 '(일명 세 가지 REST API)를
  2. APP1과 APP2 있습니다

    enter image description here

    클라이언트

  3. 있습니다 "OAuth 토큰 관리 용
  4. OPENID는 OpenID 2.0 공급자입니다.

APP2는 RS2 및 RS3의 리소스를 사용하는 RS1을 사용합니다. RS1, RS2, RS3, APP2, AS 및 OPENID는 동일한 회사 (다른 팀)가 개발하므로 신뢰 관계가 있습니다. 사용자가 처음으로 APP2에 액세스하면 APP2는 사용자를 대신하여 RS1, RS2 및 RS3의 자원에 자동으로 액세스 할 수있는 권한이 부여됩니다.

APP1은 RS2의 리소스를 사용하며 RS2의 리소스를 사용합니다. APP1은 신뢰할 수없는 제 3 자 웹 사이트이며 사용자는 RS2 및 RS3의 리소스에 액세스하기 위해 APP1을 명시 적으로 승인해야합니다.

OAuth 2.0과 관련된 대부분의 사례는 단일 리소스와 인증 서버 간의 통신 및 토큰을 요청, 발급 및 관리하는 방법을 보여줍니다.

OAuth 2.0을 사용하여이 환경을 어떻게 보호 할 수 있습니까? 예를 들어, APP2, RS1 및 RS2는 고유 한 클라이언트 식별자와 클라이언트 비밀 키를 가집니까 (다른 서버의 모든 "클라이언트"이므로)? 그렇다면 다른 요청 (APP2에서 오는) 중에 RS2 및 RS3의 리소스에 처음 액세스 할 때 RS1에 대한 액세스 토큰을 어떻게 발급합니까?

이미 ASP.NET MVC 3, WCF 4 및 DotNetOpenAuth 4를 사용하여 개발 된 AS, OPENID, APP2 및 RS1이 있습니다. RS2, RS3 및 APP1을 시스템에 도입하려하지만 알아 내려고 노력하고 있습니다. 리소스 서버와 클라이언트 간의 권한 부여가 작동하는 방식 모든 것은 IIS 7.5 및 HTTPS에서 실행됩니다.

답변

0

다른 유형의 앱은 클라이언트 컴퓨터에 다운로드 되 자마자 "신뢰할 수 없음"때문에 APP2는 웹 앱이라고 가정합니다.

나는 클라이언트 인증 정보를 사용하여 신뢰할 수있는 응용 프로그램을 서로 인증하는 것이 옳다고 생각합니다. DotNetOpenAuth 4.0 베타 버전은 아직 클라이언트 자격 증명을 지원하지 않지만 다음 주에 출시 될 예정입니다.

OAuth 2에서는 신뢰할 수있는 클라이언트에 클라이언트 자격 증명이 내장됩니다. 이러한 자격 증명은 런타임시 리소스 서버에 보내질 액세스 토큰 및 새로 고치기 위해 교환됩니다. 액세스 서버는 인증 서버에 대한 다른 요청에 의해 만료 된 액세스 토큰을 자동으로 갱신하는 DNOA API를 사용하여 각 아웃 바운드 HTTP 요청에 액세스 토큰을 적용합니다.

+0

예, APP2는 ASP.NET MVC 3으로 작성된 웹 응용 프로그램입니다. – bloudraak

+0

"bob"은 APP1에 액세스 할 때 액세스 토큰 ("bob"을 나타냄)이있는 것으로 가정합니다. RS1에서 RS2 로의 요청이 어떻게 다른 사람이 아닌 "밥"을 대신하여 요청인지 식별하는 방법은 무엇입니까? 유일한 해결책은 RS1이 각 사용자에 대해 고유 한 클라이언트 자격 증명을 가지며 RS2에서 리소스를 요청할 때 해당 클라이언트 자격 증명을 조회하고 사용하는 것입니다. 이는 자격 증명 관리 측면에서 몇 가지 문제점을 안겨줍니다. – bloudraak

+0

RS *가 신뢰할 수 있다고 말하면 사용자 당 액세스 토큰이 필요하지 않습니다. 클라이언트 자격 증명의 단일 세트만으로도 가장하는 사용자가 무엇인지 알릴 수 있습니다. 예를 들어, RS1은 RS2에 "밥의 데이터를 제공하고 여기에 RS1의 클라이언트 자격 증명"을 알립니다. RS1은 요청을 보내고 따라서 밥의 데이터로 응답합니다. –

관련 문제