Ejemplo de uso de AX en PHP OpenID
janrain (2)
La solicitud de la mitad está funcionando, sin embargo, estoy fallando en la captura.
Si la línea de arriba
$auth = $consumer->complete(''http://localhost:4001/oid_catch.php'');
ser
$response = $consumer->complete(''http://localhost:4001/oid_catch.php'');
De lo contrario, ¿de dónde viene el objeto de respuesta? ¿No recibo el openid.current_url en mi respuesta para verificar la url con?
Estoy usando la biblioteca OpenID de PHP de JanRain. Viene con un script de ejemplo que usa la extensión SReg. Pero quiero que funcione con Google (y en realidad funciona para autenticación), pero Google usa AX (intercambio de atributos) en lugar de SReg para obtener datos adicionales. Por alguna razón, a la biblioteca de JanRain le falta compatibilidad con AX en el script de ejemplo, y los comentarios de código en el script de AX están fuera de mi comprensión, aunque los comentarios en el script de SReg son claros como 1-2-3.
¿Alguien sabe cómo implementar AX sin demasiado dolor?
Se encontró con el mismo problema. Un poco de excavación en AX.php me dio un buen comienzo. No he buscado ningún error, ni probado más allá de lo básico, ni probado con nadie que no sea Google. Esto no es bonito: necesita manejo de errores, etc. Pero esto debería comenzar. Publicaré una actualización si tengo algo robusto ...
Primero en lanzar ...
// 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);
... y luego coger
<?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
}
Esos deberían ser los básicos ...