2

이 질문은 stackexchange 및 facebook API (http://api.stackexchange.com/docs/authentication)의 설명서에서 영감을 얻었으나 일반적으로 OAUTH 2.0에 더 널리 적용될 수 있습니다.Stackexchange API Implicit vs Explicit

제 질문은 내재적 모델이 콘텐츠에 대한 인증 및 액세스 권한을 부여하는 이유가 훨씬 간단 해 보이는 경우 명시 적 인증 모델을 사용하려는 이유는 무엇입니까?

기술적으로 서버 측 응용 프로그램이지만 클라이언트 측 javascript 라이브러리의 사용에 적합한 것처럼 보이는 node.js 응용 프로그램에는 암시 적 접근 방식에 따른 제한 사항이 있으며 가장 적합한 방법입니다. 일 후

편집

는 일부는 웹 클라이언트 흐름의 "암시"자연 나타납니다 독서 리소스 소유자 (사용자), 암시 적으로 클라이언트 (웹 브라우저)를 신뢰한다는 사실에서 유래한다. 이것은 묵시적 ​​신뢰가 주어지면 단순화 된 흐름이 적절 함을 의미합니다.

이것은 OAUTH 2.0을 통해 인증을 수행 할 때 리소스 소유자 (사용자)가 암시 적으로 클라이언트를 신뢰하는지 여부를 경계해야한다는 질문에 여전히 이릅니다. 이것은 사용자를 대신하여 인식과 지식을 띠고 보안 문제로 이어질 가능성이있는 것처럼 잠재적으로 위험한 태도로 보입니다.

답변

4

stackexchange API가 아닌 OAuth 2.0에 대한 설명은 암시 적 플로우에서 암시 적 허용 플로우이라고도하는 암시 적 플로우에서 위험 요소가 있습니다. 이는 권한 서 v가 사용자 에이전트/웹 브라우저에 액세스 토큰을 전송하기 때.입니다.

이로 인해 발생할 수있는 손상을 최소화하려면 액세스 토큰이 짧게 살았습니다. 또한이 시나리오에서 액세스 토큰은 사용자가 권한을 부여한 범위에만 사용할 수 있습니다. 이러한 유형의 흐름은 주로 웹 응용 프로그램을 지원하는 서버가없는 단순한 웹 응용 프로그램에 주로 사용됩니다. 페이스 북에서 볼 수있는 다소 짜증나는 앱이 하나의 예일 수 있으며, 다른 모든 개발자들은 서버 배치에 대해 걱정할 필요없이이 암시 적 플로우를 사용할 수 있습니다.

이라고하는 명시적인 흐름 인증 코드 흐름은 훨씬 안전합니다. 이것은 사용자 에이전트가 서버로부터 인증 코드를 수신하는 것을 포함합니다. 이 코드는 유효한 자격 증명을 사용하여 백엔드에서 유지 관리 할 서버 인 등록 된 앱에서만 사용할 수 있습니다.

예 : -
이의 페이스 북 그래프 API를 사용하여 일부 Google 앱이 있다고 가정하자. Google 응용 프로그램 웹 사이트를 열고 승인 할 수 있습니다.
i) 브라우저에서 토큰을 받으면 Google 응용 프로그램에서 만든 웹 페이지가 API에 도달하고 데이터를 가져 와서 서버로 반환합니다.
ii) 브라우저에서 토큰을 가져 오면 웹 페이지에서 Google 서버로 반환합니다. 이것은 구글 만이 페이스 북 API를 공격 할 수있게 해준다. 또한 모든 요청을 관리하고 요청/번호/패턴을 모니터링하기위한 모든 종류의 메트릭을 쉽게 생성 할 수있는 중앙 서버가 있습니다.

이 명시 적 흐름의 또 다른 주요 용도는 오프라인 액세스입니다. 위의 시나리오에서 앱 서버는 새로 고침 토큰을 가져올 수 있으며 로그인하지 않아도 REST API를 호출 할 수 있습니다.

서버 측 앱을 사용하는 경우 개인적으로 인증 코드 흐름/명시 적 흐름을 사용하는 것이 좋습니다.

+1

답변 해 주셔서 감사합니다. 응답하는 데는 먼 길을 간다. 두 흐름 사이의 구현 차이점과 추가 보안 및 만료되지 않는 액세스 토큰을 사용하여 회선 요청을 처리하는 기능이 가능할 때 명시 적 흐름을 사용하는 것처럼 보입니다. 그것은 토큰의 만료가 인증 서버로 내려가는 것 같고 더 정확하지는 않습니다. 예를 들어, stackoverflow는 암시 적 플로우에서 만료되지 않는 토큰을 허용합니다. 이는 클라이언트가 사용자의 명시적인 동의없이 긴 세션에 대해 암시 적 플로우를 사용하는 것이 쉽다는 것을 의미합니다. –

+0

토큰의 유효 기간은 서버에 의해 제어되며 OAuth 구현에서는 사용자가 절대로 제어하지 않습니다. 죄송 합니다만, 나는 그 질문을 이해하지 못했을 것입니다. 당신이 물어보고 싶은 것이 있습니까? 왜냐하면 당신이 스스로에게 질문하고 자신에게 대답 한 것처럼 보입니다. (나는 그것을 많이한다!) 요구 사항에보다 구체적으로 해보면, 나 또한 다른 사람들에게도 도움이 될 것이다 !! :) – divyanshm