API가 http 기본 인증을 사용하는 방법


17

API가 클라이언트가 인증해야 할 때 두 가지 다른 시나리오가 사용되는 것을 보았고 상황에 어떤 경우를 사용 해야하는지 궁금합니다.

예 1. 회사는 API를 사용하여 제 3자가 HTTP Basic을 사용하여 토큰 및 비밀로 인증 할 수 있습니다.

예 2. API는 HTTP Basic을 통해 사용자 이름과 비밀번호를 수락하여 최종 사용자를 인증합니다. 일반적으로 그들은 향후 요청을 위해 토큰을 돌려받습니다.

내 설정 : 모바일 및 웹 앱의 백엔드로 사용하는 JSON API가 있습니다. 모바일 앱과 웹 앱 모두 토큰과 비밀을 전송하는 것이 좋습니다.이 두 앱만 다른 제 3자를 차단하는 API에 액세스 할 수 있습니다.

그러나 모바일 및 웹 응용 프로그램을 사용하면 사용자가 게시물을 로그인 및 제출하고 데이터를 볼 수 있습니다. 따라서 각 요청마다 HTTP Basic을 통해 로그인하기를 원합니다.

어떻게 든이 두 가지 방법의 조합을 사용하거나 각 요청마다 최종 사용자 자격 증명 (사용자 이름 및 토큰) 만 보내 집니까? 최종 사용자 자격 증명 만 보내는 경우 클라이언트의 쿠키에 저장합니까?


쿠키는 HTTP 프로토콜의 일부가 아니며 일반적인 브라우저 기능 일뿐입니다. 따라서 웹을 배포하지 않는 경우 잊어 버리십시오.
Yam Marcovic

쿠키가 권장되지 않는 경우 API를 전달하기 위해 cred를 어떻게 / 어디에 저장합니까?
Paul Sylling

쿠키는 브라우저 사용자가 세션 토큰을 원활하게 저장하는 방법입니다. 개발자와 상호 작용하는 경우 매끄럽지 않아도됩니다. "티켓"을 부여하는 공용 연결 서비스를 설정할 수 있으며 개발자는 티켓을 메모리 내 또는 원하는 위치에 유지할 수 있습니다. 나는 실용적인 웹 서비스 경험이 없으며 이런 종류의 것들에 대한 표준 솔루션이있을 것입니다.
얌 마르코비치

최종 사용자 인증 및 API 인증에 대한 내 질문에 대한 귀하의 생각은 무엇입니까? 아직 확실하지 않습니다
Paul Sylling

답변:


7

HTTP 기본 인증을 사용하려면 모든 리소스 요청과 함께 사용자 이름과 비밀번호를 보내야합니다. username : password는 "Basic"으로 시작하는 "Authorization"요청 헤더 base64로 인코딩 된 문자열에 전달됩니다. 모든 http 통신이 (ssl을 통해) 암호화 된 경우 Authorization 헤더의 정보는 정보를 보유 할 가능성이 거의 없으므로 공격자가 쉽게 사용할 수 없습니다.

기본 인증을 사용하는 SSL 암호화 http이면 충분합니다.


2
이것의 예를 제공 할 수 있습니까? 그것은 내가 필요한 것, 바로 지금 막 붙어 ...
ganders

0

토큰 / 비밀과 함께 OAuth / OpenID가 작동합니까?

최근에 다음 시나리오를 고려했습니다.

  • 웹 애플리케이션 프론트 엔드
  • 기본 REST API
  • REST API에 액세스하는 모바일 디바이스 애플리케이션

간단한 테스트로 다음과 같은 작업을 수행 할 수있었습니다.

  • OAuth를 사용하여 웹 응용 프로그램을 통해 사용자 인증
  • OAuth를 통해 권한 부여 된 REST API로 인해 비밀이 생성되어 클라이언트로 다시 전달됩니다.
  • 그런 다음 모바일 장치는 OAuth를 통해 인증 한 다음 비밀을 통해 REST API에 의해 인증됩니다.

이를 통해 모바일 장치 응용 프로그램은 웹 프런트 엔드 (동일한 계정)를 통해와 동일한 자격 증명으로 인증하고 API에 대한 액세스 권한을 부여 할 수 있습니다.


1
따라서 귀하의 예에서는 사용자 만 인증 중입니다. API (웹 앱, 모바일 앱)를 호출하는 클라이언트는 자신을 인증하지 않습니다. 이론적으로 API가 공개되어 잠재적으로 사용자 이름과 암호를 게시 할 수있는 응용 프로그램은 토큰을 다시 얻을
폴 Sylling

사용자가 앱을 통해 인증하고 있으며 앱이 사용자를 대신하여 전화를 겁니다. 인증 프로세스는 토큰을 도출하여 앱이 전달합니다.
Brendan Green
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.