OAuth (Open Authorization) 란 정확히 무엇입니까?


201

OAuth (Open Authorization) 란 정확히 무엇입니까?

정보를 수집했습니다

그러나 나는 배우고 더 알고 싶습니다. 수명주기에 대한 정보를 찾고 있습니다. 대부분의 소셜 네트워크가이 개방형 프로토콜에 의존하는 이유는 무엇입니까?

다양한 기술 (예 : ASP.NET)을 통해 가까운 시일 내에 실제로 적용됩니까?

답변:


327

OAuth (Open Authorization) 란 정확히 무엇입니까?

OAuth를 사용 하면 리소스 소유자 (예 : 사용자) 가 타사 (예 : Facebook 응용 프로그램)에게 정보 (예 : 친구 목록 )에 대한 액세스 권한을 부여 한다는 것을 리소스 공급자 (예 : Facebook)에 알릴 수 있습니다 .

당신이 그것을 분명히 읽었다면, 나는 당신의 혼란을 이해할 것입니다. 이제 또 다른 소셜 네트워크에 참여하는 구체적인 예를 들어 봅시다!

기존 Gmail 계정이 있다고 가정합니다. LinkedIn에 가입하기로 결정했습니다. 많은 친구들을 수동으로 추가하는 것은 번거롭고 오류가 발생하기 쉽습니다. 초대를 위해 반쯤 지체되거나 이메일 주소에 오타를 삽입 할 수 있습니다. 따라서 결국 계정을 만들지 않으려는 유혹을받을 수 있습니다.

이러한 상황에 직면 한 링크드 인은 컴퓨터가 지루하고 오류가 발생하기 쉬운 작업에 훨씬 효율적이고 효과적이기 때문에 친구 목록을 자동으로 추가하는 프로그램을 작성하는 Good Idea (TM)를 보유하고 있습니다. 이제 네트워크 가입이 매우 쉬워 졌으므로 그러한 제안을 거부 할 수있는 방법없습니다 .

이 연락처 목록을 교환하기위한 API가 없으면 LinkedIn 사용자 이름과 비밀번호를 Gmail 계정에 제공해야하므로 너무 많은 권한부여해야합니다 .

이곳에서 OAuth가 제공됩니다. GMail이 OAuth 프로토콜을 지원하는 경우 LinkedIn은 GMail 연락처 목록에 액세스 할 수있는 권한을 부여하도록 요청할 수 있습니다.

OAuth는 다음을 허용합니다.

  1. 다른 액세스 수준 : 읽기 전용 VS 읽기 / 쓰기 이를 통해 사용자 목록에 대한 액세스 권한 또는 양방향 액세스 권한을 부여하여 새로운 LinkedIn 친구를 Gmail 연락처와 자동으로 동기화 할 수 있습니다.
  2. 액세스 세분성 : 연락처 정보 (사용자 이름, 전자 메일, 생년월일 등) 또는 전체 친구 목록, 일정 및 기타 정보에 대한 액세스 권한을 부여하도록 결정할 수 있습니다.
  3. 리소스 공급자의 응용 프로그램에서 액세스를 관리 할 수 ​​있습니다. 타사 응용 프로그램에서 액세스를 취소하는 메커니즘을 제공하지 않으면 정보에 액세스 할 수있는 응용 프로그램이 붙어있는 것입니다. OAuth를 사용하면 언제든지 액세스 권한을 취소 할 수 있습니다.

가까운 시일 내에 사실상의 표준이 될 것인가?

글쎄, OAuth는 중요한 발전이지만 사람들이 올바르게 사용하지 않으면 문제를 해결하지 못합니다. 예를 들어, 리소스 공급자가 한 번에 모든 리소스에 단일 읽기 / 쓰기 액세스 수준 만 제공하고 액세스 관리를위한 메커니즘을 제공하지 않으면 아무 의미가 없습니다. 즉, OAuth는 인증뿐만 아니라 인증 기능을 제공하는 프레임 워크입니다.

실제로는 소셜 네트워크 모델에 매우 적합합니다. 타사 "플러그인"을 허용하려는 소셜 네트워크에 특히 인기가 있습니다. 이것은 리소스에 대한 액세스가 본질적으로 필요하고 본질적으로 신뢰할 수없는 영역입니다 (즉, 해당 응용 프로그램에 대한 품질 관리가 거의 또는 전혀 없음).

나는 야생에서 다른 많은 용도를 보지 못했습니다. 기술적으로는 사용할 있지만 은행 기록에 자동으로 액세스하는 온라인 금융 자문 회사를 모르겠습니다 .


6
이해하기 쉽게 만들었습니다. 첫 번째 줄을 이와 비슷한 것으로 변경했을 수 있습니다. "OAuth를 사용하면 리소스 소유자 (예 : Gmail 사용자)가 타사 (예 : LinkedIn 계정)에게 정보 (예 : 연락처 목록)에 대한 액세스 권한을 부여한다는 것을 리소스 공급자 (예 : Gmail)에 알릴 수 있습니다." 당신이 페이스 북이 된 공급자와 제 3 자 '둘 다'라고 쓴 것은 혼란 스럽습니다. 흥미로운 시나리오를 소개하지만, Oauth는 회사의 다른 프로젝트간에 내부적으로 사용될 수도 있습니다. 권리? 이것이 복잡한 소개를 소개 한 이유입니까?
Honey

내 이해에 따라 OAuth의 목적은 자격 증명을 공유하지 않고 리소스 소유자 대신 타사 응용 프로그램에 시간 제한 권한을 부여하는 것입니다. 모바일 응용 프로그램에서 타사 응용 프로그램 서버로 호스팅되는 API를 사용하기 위해 OAuth가 필요한지 궁금합니다 (타사 없음)?
Monish Kamble

신뢰할 수있는 당사자가 나를 승인 할 때 이것이 인증 메커니즘이기도 함을 의미하지 않습니까?
변수

245

oAuth 란 무엇입니까?

OAuth는 단순히 비밀번호를 노출하지 않고 사용자 데이터에 액세스하기위한 타사 응용 프로그램의 인증을 처리하는 보안 인증 프로토콜입니다. 예. (많은 웹 사이트에서 fb, gPlus, twitter로 로그인)이 프로토콜 하에서 작동합니다.

관련 당사자

관련 당사자를 알면 프로토콜이 더 쉬워집니다. 기본적으로 oAuth 제공자, oAuth 클라이언트 및 소유자의 세 당사자가 있습니다.

  • oAuth 클라이언트 (자격 증명에 액세스하려는 응용 프로그램)
  • oAuth 공급자 (예 : 페이스 북, 트위터 ...)
  • 소유자 (페이스 북, Twitter .. 계정이있는 사람)

작동 원리

웹 사이트 (스택 오버 플로우)가 페이스 북 기능으로 로그인을 추가 해야하는 시나리오를 가정했습니다. 따라서 페이스 북은 oAuth 공급자이고 stackoverflow는 oAuth 클라이언트입니다.

  1. 이 단계는 앱 개발자가 수행합니다 . 맨 처음에 페이스 북 (oAuth Provider)은 이들 사이에 링크가 없기 때문에 stackoverflow (oAuth Client)에 대해 전혀 알지 못합니다. 따라서 첫 번째 단계는 페이스 북 개발자 사이트에 stackoverflow를 등록하는 것 입니다. 개발자가 앱 이름, 웹 사이트, 로고, 리디렉션 URL (중요한 것)과 같은 앱 정보를 페이스 북에 제공해야하는 경우 수동으로 수행됩니다. 그런 다음 stackoverflow가 성공적으로 등록되고 페이스 북에서 클라이언트 ID, 클라이언트 비밀 등을 얻었으며 OAUTH로 시작되어 실행 중입니다 . 여기에 이미지 설명을 입력하십시오

    2. 이제 stackoverflow 사용자가 fb 버튼으로 로그인을 클릭하면 . Stackoverflow는 ClientId (fb를 사용하여 클라이언트를 인식하는 데 사용)와 redirectUrl (fb는 성공한 후이 URL로 다시 반환 됨)로 페이스 북을 요청합니다. 따라서 사용자는 페이스 북 로그인 페이지로 리디렉션됩니다. 이것은 사용자 (소유자)가 스택 오버 플로우에 대한 페이스 북 자격 증명을 제공하지 않는 가장 좋은 부분 입니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

  1. 소유자 후 Stackoverflow가 정보에 액세스하도록 허용하십시오 . 이어서 한국어 리디렉션은 함께 유래로 다시 AUTHCODE 2 단계에서 제공된 redirectUrl을 사용.
  2. 그런 다음 Stackoverflow는 얻은 인증 코드와 함께 페이스 북과 접촉하여 모든 것이 정상 인지 확인합니다.
  3. 그런 다음에야 페이스 북은 stackoverflow에 액세스 토큰 을 제공 합니다 . 그런 다음 비밀번호를 사용하지 않고 소유자의 정보를 검색하기 위해 stackoverflow에서 액세스 토큰 을 사용합니다. 이것은 oAuth의 전체 동기입니다.

이상:

빠른 비디오

웹 링크


localhost도 URL이며 반드시 만료하고 결과를 여기에 게시하지 마십시오.
Balman Rawat

2
예 IP 주소를 리디렉션 URL로 사용할 수 있습니다 : redirect_uri = ' 127.0.0.1:4200 ' 그리고 OAuth 도메인 이름은 127.0.0.1
Samson Maben

그러나 이메일이 작동하려면 oAuth 클라이언트와 oAuth 제공자 모두에서 이메일이 동일해야합니까?
Rowayda Khayri

좋은 설명
JayD

OAuth 2는 인증 프로토콜이 아닌 보안 프로토콜입니다. 대답은 잘못된 쪽지에서 시작됩니다.
Rajat

13

간단히 말해 OAuth는 응용 프로그램이 사용자 로그인 정보를 일부 웹 사이트로 직접 가져 오지 않고도 정보에 대한 자격 증명을 얻는 방법입니다. 예를 들어, 자신의 웹 사이트에서 응용 프로그램을 작성하고 사용자의 페이스 북 계정에서 데이터를 사용하려는 경우 OAuth를 사용하여 콜백 URL을 통해 토큰을 얻은 다음 해당 토큰을 사용하여 페이스 북 API를 호출하여 토큰이 만료 될 때까지 데이터를 사용하십시오. 웹 사이트는 프로그래머가 정보를 직접 공개하지 않고 자격 증명을 온라인에 퍼뜨릴 필요없이 데이터에 액세스 할 수 있지만 데이터에 대한 보호 수준을 제공하기 때문에 웹 사이트에 의존합니다. 사실상의 승인 방법이됩니까? 아마도 최근 트위터, 페이스 북,


14
OAuth는 인증 프로세스가 아니라 인증 프로세스입니다.
André Caron

응용 프로그램에 직접 인증이 필요하다는 것을 암시하는 것은 아니지만 사용자는 서비스 공급자를 통해 제 3자가 제 생각에 사용자 데이터에 액세스 할 수 있도록 인증합니다.
ameer

OpenID는 사람들이 공유 자격 증명 공유를 중단하기를 희망하여 위임 된 인증 (기존 외부 계정 재사용)을 목표로하기 때문에 정확성을 높였습니다. OAuth는 특히 정보 교환을 촉진하기 위해 권한 부여 (자원 재사용)를 목표로합니다.
André Caron

9

Oauth는 분명히 추진력을 얻고 있으며 엔터프라이즈 API에서도 인기를 얻고 있습니다. 앱 및 데이터 중심 세계에서 기업은 Google, Facebook, Twitter에 따라 점점 더 많은 API를 외부 세계에 노출하고 있습니다. 이 개발로 3 가지 인증 삼각형이 형성됩니다.

1) API 공급자-API, Amazon, Target 등의 자산으로 자산을 노출하는 모든 기업 2) 개발자-이 API를 통해 모바일 / 기타 앱을 구축하는 회사 3) 최종 사용자-제공 한 서비스의 최종 사용자- 아마존의 등록 / 게스트 사용자 말

이제 이것은 보안과 관련된 상황을 개발합니다-(이러한 복잡성을 거의 나열하지 않습니다.) 1) 최종 사용자로서 개발자가 귀하를 대신하여 개발자가 API에 액세스하도록 허용하려고합니다. 2) API 공급자는 개발자와 최종 사용자를 인증해야합니다. 3) 최종 사용자는 자신이 제공 한 동의에 대한 권한을 부여하고 취소 할 수 있어야합니다. 4) 개발자는 API 공급자와 다양한 신뢰 수준을 가질 수 있습니다. 그녀에게 부여 된 권한 수준이 다릅니다

Oauth는 위에서 언급 한 문제를 표준 방식으로 해결하려고하는 인증 프레임 워크입니다. API와 앱이 눈에 띄게됨에 따라이 문제는 점점 더 관련성이 높아지고 그것을 해결하려는 표준 (ouath 또는 기타)이 API 제공 업체 / 개발자, 심지어 최종 사용자로서 관심을 가질만한 것이 될 것입니다!


9

OAuth ( O pen Auth orization)는 액세스 부여 / 관리 프로토콜에 대한 공개 표준입니다. 인터넷 사용자가 웹 사이트 또는 응용 프로그램에 다른 웹 사이트의 정보에 대한 액세스 권한을 부여하지만 암호는 제공하지 않는 방법으로 사용되었습니다. 인증을 다루지 않습니다 .

또는

OAuth 2.0 은 사용자가 자격 증명을 노출하지 않고도 한 사이트에서 다른 사이트로 리소스에 대한 액세스 권한을 제한 할 수있는 프로토콜입니다.

  • 유추 1 : 오늘날 많은 고급 자동차에는 주차 대행 키가 제공됩니다. 그것은 당신이 주차 승무원에게주는 특수 키이며 일반 키와 달리 자동차가 1 마일 이상 운전하는 것을 허용하지 않습니다. 일부 발렛 키는 트렁크를 열지 않지만 다른 발렛 키는 내장 휴대 전화 주소록에 대한 액세스를 차단합니다. 발렛 키가 어떤 제한을 부과하는지에 관계없이 아이디어는 매우 영리합니다. 일반 키를 사용하여 모든 것을 잠금 해제하는 동안 누군가에게 특수 키를 사용하여 차에 제한적으로 액세스 할 수 있습니다. auth0의 src

  • 유추 2 : 은행 계좌 신청서를 작성한다고 가정합니다. 여기서 Oauth는 신청자가 양식을 작성하는 대신 은행이 Adhaar 또는 여권을 사용하여 양식을 작성하는 방식으로 작동합니다.

    여기에는 다음 세 가지 엔티티가 관련됩니다.

    1. 신청자 즉 소유자
    2. 은행 계좌는 OAuth 고객이며 정보가 필요합니다
    3. Adhaar / 여권 ID는 OAuth 공급자입니다

7

OAuth는 권한 위임에 관한 것입니다 (권한을 부여 할 수있는 사람 선택). 인증과 권한은 서로 다릅니다. OAuth는 권한 부여 (액세스 제어)이며 인증 (ID 확인)도 구현하려는 경우 OAuth 위에 OpenID 프로토콜을 사용할 수 있습니다.

Facebook, Google, Github와 같은 모든 대기업은 오늘날 이러한 종류의 인증 / 권한을 사용합니다. 예를 들어, 방금 Google 계정을 사용하여이 웹 사이트에 로그인했습니다. 즉, Stackoverflow가 내 비밀번호를 알 수 없다는 것을 의미합니다. 비밀번호는 Google에서 내 비밀번호 (분명히 해시 됨)가 저장되는 곳에서 수당을받습니다. 이것은 많은 이점을 제공합니다. 그중 하나가 있습니다. 가까운 시일 내에 모든 웹 사이트에서 여러 계정을 만들 필요는 없습니다. 하나의 웹 사이트 (가장 신뢰하는 사이트)를 사용하여 다른 모든 웹 사이트에 로그인 할 수 있습니다. 따라서 하나의 비밀번호 만 기억하면됩니다.


2

OAuth Facebook / Google 버튼으로 SO 계정을 등록 할 때 발생했습니다.

  1. 응용 프로그램 (SO)이 사용자를 공급자의 권한 부여 URL로 리디렉션합니다. (데이터를 읽고 업데이트 할 수있는 응용 프로그램 액세스 권한을 사용자에게 부여할지 묻는 웹 페이지 표시).
  2. 사용자는 신청 절차 승인에 동의합니다.
  3. 서비스 공급자는 인증 코드를 매개 변수로 전달하여 사용자를 다시 응용 프로그램 (SO)으로 리디렉션합니다.
  4. SO는 코드를 액세스 권한 부여로 교환합니다.

출처 : OAuth1 서비스 제공 업체


안녕하세요, REST API로 작업해야하므로 oAuth를 설치해야합니다. 실제로 Magento를 사용하고 있습니다 .localhost에서 라이브 서버에 oAuth를 설치했습니다. 설치 방법은 무엇입니까, GoDaddy VPS 서버를 사용하고 있습니까? @john joe
Gem

@Rathinam 안녕하세요, II가 도와 드리고 싶지만 전문 지식이 없습니다. 죄송합니다
John Joe

oAuth없이 REST API를 사용할 수 있습니까? @ 존 조
보석

@Rathinam 네, 그것은 당신에 달려 있습니다
John Joe

1

OAuth는 인터넷 사용자가 비밀번호를 노출시키지 않고 Microsoft, Google, Facebook 또는 Twitter 계정을 사용하여 타사 웹 사이트에 로그인하는 방법으로 사용되는 인증에 대한 공개 표준입니다.


2
나는 당신이했다고 생각 오해의 OAuth 및 오픈 ID
A23149577

0

OAuth는 리소스 소유자 (facebook, google, tweeter, microsoft live 등)에서 필요한 정보를 제공하거나 타사 시스템 (예 : 사이트)에 대한 쓰기 권한을 제공하는 데 사용되는 프로토콜입니다. 대부분 OAuth 프로토콜이 없으면 자격 증명을 해당 시스템 간의 부적절한 통신 방식 인 타사 시스템에 사용할 수 있어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.