사이트 내 전체검색
PHP
PHP를 이용하여 10 분만에 OpenID Consumer 구축하기
로빈아빠
https://cmd.kr/php/744 URL이 복사되었습니다.

본문

PHP를 이용하여 10 분만에 OpenID Consumer 구축하기
 
 
PHP 에서 OpenID를 이용하기 위한 오픈소스 라이브러리  5가지 중에서 총 JanRainSimpleOpenID 을 사용하는 경우가 많은데
JanRain 라이브러리의 경우 Consumer,Server 의 기능까지 모두 제공하고 있고 SimpleOpenID의 경우 Consumer 기능만을 제공하고 있습니다.
 
JanRain의 경우 너무 많은 기능을 제공하고 있기 때문에 간단히 SimpleOpenID를 이용해서 Consumer를 구축해보겠습니다.
 
1.라이브러리 다운로드
SimpleOpenID 사이트에서 다운로드를 받으시거나 여기에서 직접 다운로드 openid_simple-2006-08-07.zip   하시기 바랍니다.
압축을 풀면 다음과 같은 두가지 파일을 볼 수 있습니다.
class.openid.php    -- 이 파일 하나만 있으면 OpenID Consumer를 구현할 수 있습니다.
openid-example.php -- 예제파일
 
 
2.예제파일 수정
예제를 작동시키기 위해서 openid-example.php에서  모든 $_SERVER["PATH_INFO"] 을
$_SERVER["PHP_SELF"] 로 변경시키면 테스트를 할 수 있다.
 
Ubuntu 7.04(Feisty Fawn) 나 , www.apmsetup.com 에서 제공하는 APM을 Windows XP에 기본으로 설치하였을 경우
예제를 작동시키면 Error: Class SimpleOpenID requires curl extension to work 라는메세지를 볼 수 있습니다.
에러 메세지가 출력되는 이유는 Simple OpenID 클래스를 작동시키기위해서는 curl extension (Client url library function)이
필요하기 때문입니다.
 
1) 우분투의 경우 #apt-get install php5-curl  을 실행해서 설치
2) Windows XP의 경우 팩키지를 받으면 기본으로 설치되어 있고 php.ini에
[Extension]
extension=php_curl.dll
을 추가 시켜 주면 됩니다.
 
  만약 웹호스팅해서  CURL을 설치할 수 없다면 php로 curl을 구현해주는 라이브러리를 설치할 수도 있습니다.
  설치 방법은 libcurl Emulator 를 참조하시기 바랍니다.
 
 
3. 예제파일 실행
 http://localhost/openid-example.php 를 실행할 경우 아래와 같은 화면을 볼 수 있고 OpenID 테스트를 해볼실 수 있습니다.
 


 
 
 
4. Cusomize

  • OpenID 서버에 요청할 수 있는 필드

nickname, email, fullname, dob, gender, postcode, country, language, timezone
 
<?
require('class.openid.php');

// EXAMPLE
if ($_POST['openid_action'] == "login"){ // Get identity from user and redirect browser to OpenID Server
    $openid = new SimpleOpenID;
    $openid->SetIdentity($_POST['openid_url']);
    $openid->SetTrustRoot('http://' . $_SERVER["HTTP_HOST"]);
    $openid->SetRequiredFields(array('email','fullname'));  //  Consumer 가 요구하는 필수 항목들
    $openid->SetOptionalFields(array('dob','gender','postcode','country','language','timezone')); //  Consumer 가 요구하는 옵션  항목들
    if ($openid->GetOpenIDServer()){
        $openid->SetApprovedURL('http://' . $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"]);      // 모든 처리가 끝나고 OpenID 서버에서 리다이렉트되는 URL
        $openid->Redirect();     // This will redirect user to OpenID Server
    }else{
        $error = $openid->GetError();
        echo "ERROR CODE: " . $error['code'] . "<br>";
        echo "ERROR DESCRIPTION: " . $error['description'] . "<br>";
    }
    exit;
}
else if($_GET['openid_mode'] == 'id_res'){     // Perform HTTP Request to OpenID server to validate key
    $openid = new SimpleOpenID;
    $openid->SetIdentity($_GET['openid_identity']);
    $openid_validation_result = $openid->ValidateWithServer();
    if ($openid_validation_result == true){         // 인증이 정상적으로 이루어졌을 경우
        //이 부분에서 세션 관련 처리를 할 수 있습니다.
        echo "VALID";
     echo $_GET['openid_identity'];                // 사용자의 OpenID
     echo $_GET['openid_sreg_nickname:'];    // 사용자의 별명
  echo $_GET['openid_sreg_email'];            // 사용자의 이메일
  echo $_GET['openid_sreg_fullname:'];      // 사용자의 성명
  echo $_GET['openid_sreg_dob'];              // 사용자의 생일
  echo $_GET['openid_sreg_gender'];         // 사용자의 성별
  echo $_GET['openid_sreg_postcode'];      // 사용자의 우편번호
  echo $_GET['openid_sreg_country'];        // 사용자의 거주지역
  echo $_GET['openid_sreg_language'];      // 사용자가 선호하는 언어
  echo $_GET['openid_sreg_timezone'];      // 사용자 timezone   For example, "Europe/Paris" or "America/Los_Angeles".
    }else if($openid->IsError() == true){            // 인증하는 도중 에러가 발생하였을 경우 처리
        $error = $openid->GetError();
        echo "ERROR CODE: " . $error['code'] . "<br>";
        echo "ERROR DESCRIPTION: " . $error['description'] . "<br>";
    }else{                                            // Signature Verification Failed
        echo "INVALID AUTHORIZATION";
    }
}else if ($_GET['openid_mode'] == 'cancel'){ // User Canceled your Request
    echo "USER CANCELED REQUEST";
}
?>
 
5. Reference
php-curl 관련 정보 :  http://kr2.php.net/curl/
curl 다운로드 사이트  : http://curl.haxx.se/download.html

댓글목록

등록된 댓글이 없습니다.

PHP
871 (5/18P)

Search

Copyright © Cmd 명령어 13.59.92.247