Пример использования AX в PHP OpenID
Я использую PHP OpenID библиотеку JanRain. Это идет с примером сценария, который использует расширение SReg. Но я хочу, чтобы он работал с Google (и он действительно работает для аутентификации), но Google использует AX (обмен атрибутами) вместо SReg для дополнительных данных. По какой-то причине в библиотеке JanRain отсутствует поддержка AX в примере сценария, и комментарии кода в сценарии AX мне не понятны, хотя комментарии в сценарии SReg понятны как 1-2-3.
Кто-нибудь знает, как реализовать AX без особой боли?
2 ответа
Столкнулся с той же проблемой. Некоторое копание в AX.php заставило меня начать работу. Не искали никаких ошибок, не протестировали сверх базового уровня, не протестировали ни с кем, кроме Google. Это не красиво: требует обработки ошибок и т. Д. Но это должно помочь вам начать. Выложу обновление если у меня что-то будет крепче...
Первый бросить...
// oid_request.php
// Just tested this with/for Google, needs trying with others ...
$oid_identifier = 'https://www.google.com/accounts/o8/id';
// Includes required files
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
require_once "Auth/OpenID/AX.php";
// Starts session (needed for YADIS)
session_start();
// Create file storage area for OpenID data
$store = new Auth_OpenID_FileStore('./oid_store');
// Create OpenID consumer
$consumer = new Auth_OpenID_Consumer($store);
// Create an authentication request to the OpenID provider
$auth = $consumer->begin($oid_identifier);
// Create attribute request object
// See http://code.google.com/apis/accounts/docs/OpenID.html#Parameters for parameters
// Usage: make($type_uri, $count=1, $required=false, $alias=null)
$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/contact/email',2,1, 'email');
$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/first',1,1, 'firstname');
$attribute[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/last',1,1, 'lastname');
// Create AX fetch request
$ax = new Auth_OpenID_AX_FetchRequest;
// Add attributes to AX fetch request
foreach($attribute as $attr){
$ax->add($attr);
}
// Add AX fetch request to authentication request
$auth->addExtension($ax);
// Redirect to OpenID provider for authentication
$url = $auth->redirectURL('http://localhost:4001', 'http://localhost:4001/oid_catch.php');
header('Location: ' . $url);
... а потом ловить
<?php
// oid_catch.php
// Includes required files
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
require_once "Auth/OpenID/AX.php";
// Starts session (needed for YADIS)
session_start();
// Create file storage area for OpenID data
$store = new Auth_OpenID_FileStore('./oid_store');
// Create OpenID consumer
$consumer = new Auth_OpenID_Consumer($store);
// Create an authentication request to the OpenID provider
$auth = $consumer->complete('http://localhost:4001/oid_catch.php');
if ($response->status == Auth_OpenID_SUCCESS) {
// Get registration informations
$ax = new Auth_OpenID_AX_FetchResponse();
$obj = $ax->fromSuccessResponse($response);
// Print me raw
echo '<pre>';
print_r($obj->data);
echo '</pre>';
exit;
} else {
// Failed
}
Это должны быть основы...
Половина запроса работает, однако я получаю сбой в Catch.
Если строка выше
$auth = $consumer->complete('http://localhost:4001/oid_catch.php');
быть
$response = $consumer->complete('http://localhost:4001/oid_catch.php');
Иначе откуда берется объект ответа? Я не вернул openid.current_url в своем ответе, чтобы проверить URL с?