Я спросил об этом на форумах поддержки Google по интеграции приложений, но не получил никакого ответа. Может быть, кто-нибудь здесь поможет направить меня в правильном направлении.
Я пытаюсь интегрировать приложение Perl с Google Apps, но у меня возникают проблемы с аутентификацией OpenID. Я использовал это руководство по PHP от Google в качестве справочника, поскольку я не могу найти примеров Perl.
Мой исходный файл index.cgi (на который ссылается manifest.xml и начальная точка транзакции OpenID) выглядит следующим образом:
use Net::OpenID::Consumer;
use CGI;
# ...
my $q = CGI->new();
my $domain = $q->param('domain');
if (!$domain) {
print $q->header(), 'Provide domain please.';
exit 0;
}
# my website
my $root = 'http://www.example.com/';
my $csr = Net::OpenID::Consumer->new(
# The user agent which sends the openid off to the server
ua => LWP::UserAgent->new,
# Who we are
required_root => $root,
# Consumer Key Secret from Google Apps Marketplace
consumer_secret => 'Zzzzzz9zzAAAAA....'
);
my $claimed_id = $csr->claimed_identity(
'https://www.google.com/accounts/o8/site-xrds?hd=' . $domain);
if ($claimed_id) {
my $check_url = $claimed_id->check_url(
# Upon validation, the user will be returned here, and real
# work may begin
return_to => $root . '/return.cgi',
trust_root => $root
);
print $q->redirect($check_url);
}
else {
print $q->header(), "Error";
}
Эта часть вроде работает. То есть меня перенаправляют на return.cgi с кучей openid.*
параметров. Однако в этот момент я получаю следующую ошибку:
no_identity_server В указанном URL-адресе не указан сервер идентификации OpenID
Я использую последнюю версию модуля Net :: OpenID :: Consumer.
Вот важные биты return.cgi:
my $q = CGI->new();
my $csr = Net::OpenID::Consumer->new(
ua => LWP::UserAgent->new,
# The root of our URL
required_root => 'http://www.example.com/',
# Our password.
consumer_secret => 'Zzzzzz9zzAAAAA....',
# Where to get the information from.
args => $q
);
print $q->header();
$csr->handle_server_response(
not_openid => sub {
print "That's not an OpenID message. Did you just type in the URL?";
},
setup_required => sub {
my $setup_url = shift;
print 'You need to do something <a href="#">here</a>.';
},
cancelled => sub {
print 'You cancelled your login.';
},
verified => sub {
my $vident = shift;
my $url = $vident->url;
print "You are verified as '$url'. ** FIN **";
},
error => sub { die "Can't figure it out: ", @_; }
);
Как вы понимаете, я хочу, чтобы субмарина verified
сработала, но вместо этого я получаю сообщение об ошибке. Что-то очевидное, что мне не хватает? Любая помощь будет оценена.