현재 응용 프로그램에서 API를 분리하기 위해 웹 응용 프로그램의 재구성을 계획 중입니다. 현재 사용자는 운영자 ID (사용자 이름)와 암호를 표준 HTML 양식에 입력하여 응용 프로그램에 로그인하고 데이터베이스 테이블을 확인하고 PHP 세션을 생성하여 인증을 수행합니다 (Zend_Session
을 사용하여 처리). API를 분리 한 후에도이 작업을 계속하는 방법을 모르겠습니다.웹 응용 프로그램에서 API를 분리 할 때의 인증
// GET https://foo.example.com/module/trips.php
if (isLoggedIn() && isAuthorized($SESSION->operatorID)) {
require 'views/trips.php';
}
// POST https://foo.example.com/module/trips.php?action=take
// ...
// this request can come from AJAX, for example
if (isLoggedIn() && isAuthorized($SESSION->operatorID)) {
$model->assignTrip($SESSION->operatorID, $_POST['trip_id']);
}
은 분명히이 따라서, 두 가지를 분리하는 노력이 매우 편안하고되지 않습니다 : 여기에
상황이 현재 작동하는 방법을 설명하기 위해 몇 가지 간단한 코드입니다. 이것이 내가 제안한 것입니다 (진행중인 작업 임).// GET https://api.foo.example.com/v1.0/trips
echo json_encode($model->getAllTrips());
// POST https://api.foo.example.com/v1.0/trips/:trip_id/operator
$model->assignTrip($_POST['operator_id'], $trip_id);
나는 REST가 무국적이라는 것을 알고 있습니다. 이 단순화 된 예에서는 운영자 만이 스스로 여행을 할당 할 수 있어야합니다. 이 API를 어떻게 적용합니까?
REST API 인증 관련 많은 질문과 기사를 읽었으며 OAuth/OAuth2에 대한 이야기는 모두 토큰을 통해 API의 클라이언트를 인증하는 데는 좋지만 API 클라이언트의 사용자를 인증하는 것은 아닙니다. 내 경우에는 API 클라이언트가 여전히 웹 응용 프로그램입니다.
내 주요 질문 : API는 사용자의 신원을 어떻게 결정합니까? 아니면 그럴까?
는 또한 내가 웹 응용 프로그램에서이 일을 생각했다 :
불필요한 오버 헤드하지만 that's what it looks like in this answer 것 같다// POST https://foo.example.com/module/trips.php?action=take
// ...
// this request can come from AJAX, for example
if (isLoggedIn() && isAuthorized($SESSION->operatorID)) {
// Use cURL to send an HTTP POST request with the appropriate data to
// https://api.foo.example.com/v1.0/trips/6/operator
}
. 내 구조 조정 후 내가 자바 스크립트에서이 같은 일을해야한다고 생각 :
$.ajax({
type: 'POST',
url: 'https://api.foo.example.com/v1.0/trips/' + trip + '/operator',
data: {
operator_id: 6601
}
}).success(function() {
// It worked!
});
내가 예를 들어 GitHub API Authentication에서 검토 한 기본 사용법 curl -u "username" <api-endpoint-url>
를 사용합니다. 이 애플리케이션은 이미 HTTPS로만 제공되기 때문에 Authorization
HTTP 헤더 사용에 대해 걱정하지 않지만이 경우 로컬로 비밀번호 (예 : 웹 저장소 또는 기타)를 저장할 필요가 없습니까?
나는 또한 this blog post을 읽었으며 그게 내가하고있는 일인지 확신 할 수 없다. 그렇다면 해쉬 된 데이터에 사용자 이름과 암호를 포함시켜야 하는가?
아마도 API가 일반적으로 작동하는 방식을 오해하고 있습니다. 그렇다면 누군가가이를 해결하는 것이 좋을 것입니다.