인증을 위해 OAuth 2.0을 사용하고 인증을 위해 OpenID 2.0을 사용하는 다음과 같은 분산 시스템을 고려하십시오. 에 "인증 서버는 그대로OAuth 2.0을 사용하여 여러 자원 서버를 보호하는 방법은 무엇입니까?
- RS1, RS2와 RS3는"자원 서버 '(일명 세 가지 REST API)를
- APP1과 APP2 있습니다
클라이언트
- 있습니다 "OAuth 토큰 관리 용
- 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에서 실행됩니다.
예, APP2는 ASP.NET MVC 3으로 작성된 웹 응용 프로그램입니다. – bloudraak
"bob"은 APP1에 액세스 할 때 액세스 토큰 ("bob"을 나타냄)이있는 것으로 가정합니다. RS1에서 RS2 로의 요청이 어떻게 다른 사람이 아닌 "밥"을 대신하여 요청인지 식별하는 방법은 무엇입니까? 유일한 해결책은 RS1이 각 사용자에 대해 고유 한 클라이언트 자격 증명을 가지며 RS2에서 리소스를 요청할 때 해당 클라이언트 자격 증명을 조회하고 사용하는 것입니다. 이는 자격 증명 관리 측면에서 몇 가지 문제점을 안겨줍니다. – bloudraak
RS *가 신뢰할 수 있다고 말하면 사용자 당 액세스 토큰이 필요하지 않습니다. 클라이언트 자격 증명의 단일 세트만으로도 가장하는 사용자가 무엇인지 알릴 수 있습니다. 예를 들어, RS1은 RS2에 "밥의 데이터를 제공하고 여기에 RS1의 클라이언트 자격 증명"을 알립니다. RS1은 요청을 보내고 따라서 밥의 데이터로 응답합니다. –