2013-08-06 2 views
3

OAuth 1.0a 공급자 역할을하는 웹 서비스가 있습니다. 웹 애플리케이션은 OAuth 1 워크 플로우를 통해 사용자 자원에 액세스합니다. 여태까지는 그런대로 잘됐다.OAuth2 다른 클라이언트 인증 방법

클라이언트 웹 응용 프로그램은 특정 사용자/자원 소유자와 링크되지 않은 개인 데이터를 교환하기 위해 다른 필요를 위해 서비스와 통신해야합니다. 이를 위해 OAuth2를 사용하는 것이 좋습니다. 특히 Client Credentials Grant (4.4) (정확히 이것을 위해 설계된)입니다. "기밀 클라이언트"(OAuth 사양에 따라 웹 응용 프로그램이이 범주에 속함)에서 직접 클라이언트를 인증하고 액세스 토큰을 얻을 수 있습니다.

EDIT : 당연히 내가 말하는 HTML/javascript이지만 공급자/웹 서비스와의 통신은 서버 측에서만 발생합니다. 자격 증명 (클라이언트 비밀 키, 키 등)은 모두 서버에 저장되며 서버를 떠나지 않습니다.

사양에 따르면 인증은 "username + password"(HTTP 기본 인증 방식의 클라이언트 비밀번호) 또는 "다른 인증 방법"을 사용하여 발생할 수 있습니다.

나는이 "다른 인증 방법"이 무엇 일지에 대한 단서를 찾을 수 없었습니다. OAuth1에 대해 개인/공개 키 쌍을 사용하므로이 작업에도 사용할 수 있습니까? 사양은 매우 자유롭고 (매우 모호합니다!)이 시점에서.

제 3 자 클라이언트가 표준 라이브러리 (예 : DotNetOpenAuth)를 사용하여 쉽게 구현할 수 있도록 다양한 라이브러리에서 지원하는 것을 사용하고 싶습니다. 필요한 경우 기존 라이브러리 (플러그인)를 수용 할 수있는 한 사용자 지정 메서드에 대해 코딩을 수행해야한다고 가정하는 것이 합리적입니다.

HTTP 기본 이외에는 "표준" OAuth 2 인증을 받으시겠습니까?

답변

2

웹 응용 프로그램이란 클라이언트 브라우저에서 실행되며 서비스에 대한 보안 요청을해야하는 JavaScript 및 HTML 앱을 의미합니다. 이는 "기밀 클라이언트"가 아닙니다. 브라우저 기반 앱에 비밀 정보를 저장할 수 없으므로 비밀로 유지할 수 있습니다.

웹 응용 프로그램에서 서버 간 요청을 수행해야하는 서버 측 응용 프로그램을 의미하는 경우 실행 코드 및 공개 키를 공개적으로 확인할 수 없으므로 이는 "기밀 클라이언트"입니다.

나는 "다른 인증 방법"을 하나의 요청으로 완료 할 수있는 http (또는 https)를 통해 일반적으로 사용되는 인증 체계를 의미하는 것으로 해석합니다. TLS를 사용하는 클라이언트 인증서 인증도이 버켓에 포함될 수 있습니다. OAuth2 4.4 클라이언트 자격 증명 부여의 주요 부분은 클라이언트 응용 프로그램이 기존 인증 방법을 통해 OAuth 토큰 서비스에 자격 증명을 직접 제공한다는 것입니다. 이 예제는 HTTP 기본 인증을 사용하지만 이는 하나의 예일뿐입니다.

클라이언트 자격 증명 부여는 주로 자원 소유자 자격 증명이 인증 헤더 대신 http 요청 본문에 사용자 자격 증명을 제공한다는 점에서 리소스 소유자 자격 증명 (4.3)과 다릅니다. 리소스 소유자 부여와 함께 다른 인증 방법을 사용하는 것은 어려울 것입니다.

클라이언트 자격 증명 부여와 함께 다른 인증 방법을 사용할 때주의해야 할 점은 OAuth2 클라이언트 라이브러리의 HTTP 기본 인증 이외의 다른 기능에 대한 지원이 최고로 좋지 않을 수 있다는 것입니다. Client Credentials로 digest 또는 client cert auth를 사용하더라도 OAuth2 사양에 해당하는 경우라도 기존 OAuth2 클라이언트 라이브러리에는 특정 순열에 대한 지원 기능이 내장되어 있는지 의심 스럽습니다.Google이나 Yahoo와 같은 대기업의 일부가 HTTP Basic auth 이외의 것을 사용하여 클라이언트 자격 증명의 예제를 찾을 수 있는지 확인하십시오. 거기에 사용 된 것들은 OAuth 클라이언트 라이브러리 (특히 그들이 제공하는 라이브러리)에서 지원 될 가능성이 더 큽니다.

연결의 양쪽 끝을 소유하고있는 경우에는 별 문제가되지 않습니다. 원하는대로 무엇이든 할 수 있으며 필요에 맞게 요청을 조정하거나 조정할 수있는 클라이언트 라이브러리를 찾을 수 있습니다.

클라이언트 자격 증명을 사용하여 임의의 클라이언트가 서비스에 연결되게하려면 클라이언트가 필요한 자격 증명을 제시하는 방법에 대한 설명서와 샘플 코드를 제공 할 계획을 세워야합니다. 선반에서 OAuth2 클라이언트 라이브러리는 아마 당신의 계획에 대한 자동 지원을 제공하지 않을 것입니다.

+0

물론 리소스 공급자와 인증을 수행하는 부분은 서버 측이지만 향후 독자를 위해 지적 해 주셔서 감사합니다. –

+0

현재 양쪽 끝을 소유하고 있지만 서비스는 타사 고객에게 공개됩니다. 나는 누군가가 다른 방법을 지원하는 OAuth2 제공자를 찾았는지 알고 싶었습니다. (필자는 아무 것도 발견하지 못했지만, 지식은 제한되어있었습니다 :)) 직접 시도하기 전에. 휠을 재발 명하기는 쉽지 않습니다. 특히 잠재적으로 비표준적인 것을 구현할 때 더욱 그렇습니다. –

+0

OAuth2 토큰 서비스의 구현 자로서 다양한 부여 유형에 대한 사양 요구 사항을 잘 알고 있지만 Basic 인증 이외의 클라이언트 자격 증명 부여를 지원한다고 알리는 OAuth2 클라이언트 라이브러리가 없습니다. 그런 일이 있을지 모르지만, 나는 그것을 보지 못했습니다. – dthorpe