Codeigniter OpenID Аутентификация
Я новичок в концепции OpenID и недавно пытался реализовать библиотеку OpenID для CodeIgniter с использованием системы JanRain PHP 5. Однако возникли некоторые проблемы при получении простых данных с сайтов, таких как Google и Yahoo...
Мой конфигурационный файл для библиотеки OpenID выглядит следующим образом:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['openid_storepath'] = 'tmp';
$config['openid_policy'] = 'test/policy';
$config['openid_required'] = array('email');
$config['openid_optional'] = array('fullname');
$config['openid_request_to'] = 'test/check';
?>
Тем не менее, я не могу получить значение "email" или "полное имя". Я пытался заполнить другие поля (например, псевдоним), но это также не дало результатов. Кроме того, многие другие параметры, указанные в документах JanRain (например, " VerifiedEmail " и "предпочитаемый пользователь"), просто вызывали ошибку SREG.
Аутентификации успешны, так как они возвращают сообщение об успехе, но как я могу получить доступ к информации, которую я запрашивал?
Изменить: вот обратный URL:
http://www.{Site}.net/v2/test/check?janrain_nonce=2011-12-10T05:53:01ZFXVT02&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.return_to=http%3A%2F%2Fwww.{Site}.net%2Fv2%2Ftest%2Fcheck%3Fjanrain_nonce%3D2011-12-10T05%3A53%3A01ZFXVT02&openid.claimed_id=https%3A%2F%2Fme.yahoo.com%2Fa%2F{Token}%23df6f7&openid.identity=https%3A%2F%2Fme.yahoo.com%2Fa%2F{Token}&openid.assoc_handle={Handle}&openid.realm=http%3A%2F%2Fwww.{Site}.net%2Fv2%2F&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.response_nonce=2011-12-10T05%3A53%3{Nonce Token}&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce%2Creturn_to%2Csigned%2Cpape.auth_level.nist&openid.op_endpoint=https%3A%2F%2Fopen.login.yahooapis.com%2Fopenid%2Fop%2Fauth&openid.pape.auth_level.nist=0&openid.sig=CUa39ZjhGE8nWc7TMvbS8UFlwjQ%3D
Спасибо!
1 ответ
Я не могу помочь вам в PHP, но могу показать вам код, который я разработал в Java, который работает для Yahoo
пока я создаю AuthenticationUrl()
для Yahoo это то, что я делаю
StringBuilder sb = new StringBuilder(1024);
sb.append(endpoint.getUrl())
.append(endpoint.getUrl().contains("?") ? '&' : '?')
.append(getAuthQuery(endpoint.getAlias()))
.append("&openid.return_to=")
.append(returnToUrlEncode)
.append("&openid.assoc_handle=")
вот мой getAuthQuery
функция
String getAuthQuery(String axa) {
if (authQuery!=null)
return authQuery;
List<String> list = new ArrayList<String>();
list.add("openid.ns=http://specs.openid.net/auth/2.0");
list.add("openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select");
list.add("openid.identity=http://specs.openid.net/auth/2.0/identifier_select");
list.add("openid.mode=checkid_setup");
list.add("openid.ns." + axa + "=http://openid.net/srv/ax/1.0");
list.add("openid." + axa + ".mode=fetch_request");
list.add("openid." + axa + ".type.email=http://axschema.org/contact/email");
list.add("openid." + axa + ".type.fullname=http://axschema.org/namePerson");
list.add("openid." + axa + ".type.language=http://axschema.org/pref/language");
list.add("openid." + axa + ".type.firstname=http://axschema.org/namePerson/first");
list.add("openid." + axa + ".type.lastname=http://axschema.org/namePerson/last");
list.add("openid." + axa + ".type.gender=http://axschema.org/person/gender");
list.add("openid." + axa + ".required=email,fullname,language,firstname,lastname,gender");
String query = Utils.buildQuery(list);
authQuery = query;
return query;
}
надеюсь, это даст вам представление о том, как использовать обмен атрибутами.