타사 사이트로 싱글 사인온을위한 API 생성


13

내 사이트는 소프트웨어 회사가 호스팅하는 자체 하위 도메인에있는 타사 소프트웨어와 통합해야합니다. 내 사이트의 사용자가 하위 도메인에 액세스 할 수 있도록 타사 개발자에게 내 워드 프레스 사이트에 대한 API 호출을 수행하는 데 사용할 수있는 엔드 포인트를 제공해야합니다.

다른 사이트는 일종의 API를 통해 내 사이트의 사용자를 인증해야합니다.

어디서부터 시작해야할지 모르겠지만 제 생각은 이것이 저보다 똑똑한 사람들이 알아 낸 것입니다. 미리 감사드립니다!


1
어떤 종류의 API 호출이 필요합니까? 무엇을하려고합니까? WP의 XML-RPC 지원 ( codex.wordpress.org/XML-RPC_Support )을 살펴 보셨습니까 ?
anu

다른 사이트는 내 WP 사이트에서 사용자를 확인 / 인증해야합니다.
emersonthis

답변:


16

사이트 간 스크립팅 문제

도메인간에 WP 인증 쿠키를 전송할 수 없습니다. 또한 프로그래밍 방식으로 다른 WP 설치에 로그인하기 위해 일반 텍스트 비밀번호를 저장하지 않으려 고합니다. 따라서 사용자가 WordPress에 로그인 한 다음 타사 사이트에서 API 엔드 포인트를 통해 로그인 상태에 액세스해야합니다. 이렇게하면 WordPress가 모든 인증을 처리 할 수 ​​있습니다. API 엔드 포인트가 제 3 자에게 데이터를 제공하기 위해 사용자가 물리적으로 WP 측에 로그인해야하므로 매우 안전합니다.

API 엔드 포인트 생성

내가 방금 작성한이 기사를 확인하십시오 : http://coderrr.com/create-an-api-endpoint-in-wordpress/

또한 여기에서 코드 데모를 볼 수 있습니다 : https://gist.github.com/2982319

자신의 앱 요구에 맞는 논리를 파악해야하지만,이를 통해 WordPress 측에서 원하는 것을 제공 할 수있는 엔드 포인트를 만들 수 있습니다.

인증 사이트로 WordPress를 사용하고 있으므로 is_user_logged_in ()과 같은 검사를 사용할 수 있습니다. 로그인 한 경우 필요한 정보를 포함하여 사용자 개체를 타사에 반환하십시오.

타사에서 로그인

제 3 자로부터 redirect_to 쿼리 변수를 사용하여 원활한 경험을 위해 로그인 페이지에 연결할 수 있습니다. 로그인하면 타사 사이트로 다시 전달됩니다.

http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com

원격 로그인

타사 사이트에서 WordPress에 사용자를 로그인해야하는 경우이 사이트에 나와있는 간단한 WP 기능을 사용할 수 있습니다. http://kuttler.eu/code/log-in-a-wordpress-user-programmatically/

보안을 유지하려면 공유 비밀을 사용하고 해당 비밀에서 시간 기반 해시를 만들어야합니다. 기본적으로 다음과 같습니다.

타사는 타임 스탬프 및 공유 암호로 생성 된 토큰과 함께 요청을 보냅니다.

$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);

워드 프레스 설치가 요청을받습니다.

$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);

if((time() - $timestamp) > 30) # Threshold is 30 seconds
    //do something here - TOKEN expired!

$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);

if($token == $token_to_check)
    //authenticated!

타사 소프트웨어가 WP와 관련이 없으므로 기본적으로 단일 사인 온이지만 WP가 인증 공급자 역할을합니다.
anu

@anu : 맞습니다.
emersonthis

@Brian : 다중 사이트 설치로 전환하려는 아이디어에 관심이 있지만 쿠키에 대한 요점을 완전히 이해하지 못합니다. 타사 소프트웨어는 사용자가 실제로 내 사용자 중 하나인지 확인해야합니다. 소프트웨어는 자체적으로 충분하며 자체 쿠키 또는 기타 정보를 제공 할 수 있습니다.
emersonthis

@ 에머슨 지금 봅니다. 혼란을 드려 죄송합니다. 내가 만든 엔드 포인트 아이디어를 사용하고 인증을 위해 사용자 메타에서 공유 토큰을 사용할 수 있습니다. 사용자가 존재하는 경우 타사에 JSON 응답을 반환하십시오.
브라이언 페터 (Brian Fegter)

1
아주 좋은 해결책. 응용 프로그램이 다른 서버에 설치되어 있고 어떤 이유로 각 컴퓨터의 시간이 다른 경우 문제가있을 수 있습니다. counter대신 time()요청 을 사용 하여 전달하는 것이 좋습니다 . 양쪽은 마지막 카운터를 계속 유지하며 API가 새 카운터로 요청을 받으면 새 카운터가 마지막 카운터보다 큰지 확인합니다. 이런 식으로 지연은 해를 끼칠 수 없습니다.
guyaloni
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.