(1 2 3) я тем временем OpenID мучаю. Все-таки перловый код
Но с консьюмером я всё же уже разобрался. Может кому поможет
1. Пользователь приходит к нам на сайт и получает форму, в которую он вводит свой идентификатор.
Я немного развлекся и завел отдельное поле для юзернейма, отдельно менюшку для популятрных сайтов.
Можете в комменты накидать еще вариантов - впишу. Первый подход к снаряду (первый HTTP-запрос) завершен.
2.Пользователь жмет кнопку Log In, мы получаем (формируем из имени юзера и названия сайта) URL,
и делаем на неё HTTP-запрос. Парсим его, находим URL OpenID-продьюсера, которая там внутри как link rel написана. Это то, что называется claimed identity. (всё это кроме формирования URL делается единственным вызовом метода claimed_identity объекта Net::OpenID::Consumer. На данный момент никто еще не обещал что это правда.
Медодом check_url объекта Net::OpenID::ClaimedIdentity формируем URL-ку запроса на проверку. Не забываем указать куда возвращаться, добавив к URL нашего скрипт какой-нибудь параметр, чтобы, проанализировав его, мы узнали что это третий подход к снаряду, а не первый.
И радостно редиректим юзера на неё. Второй подход к снаряду завершен.
3. OpenID-продьюсер юзера о чем-то с юзерским браузером общается. Потом посылает юзера обратно к нам.
Мы проверяем, не попросили ли нас послать юзера что-то еще делать на том сайте - не передали ли нам
user_setup_url. Если передали, посылаем юзера туда. Когда он придет обратно, он, наверное будет на том сайте корректно залогинен. Если user_setup_url undefined, значит юзера больше мучить не нужно.
Проверяем, не отказался ли юзер от авторизации. Если отказался (метод user_cancel возвращает true) то увы и ах.
Иначе получаем объект Net::OpenId::VerifiedIdentity. Здесь мое терпение лопнуло, и я не стал писать в своем тестовом скрипте примеры извлечения оттуда foaf, rss и тому подобных вещей. Если этого объекта нам не дают,
значит что-то сломалось и нужно методом err вывести сообщение об ошибке. Если объект дали, то юзер успешно залогинен.
Вот текст скрипта, который в отличие от кода, имеющегося во встроенной документации модуля Net::OpenID::Consumer кладется на свой сайт и работает. Правда модулей ему нужна куча:
Net::OpenID::Consumer, LWP, Crypt::DH. Ну и CGI.pm, конечно, куда ж без нее, но она давн в дистрибутиве Perl.
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
use LWP::UserAgent;
use Net::OpenID::Consumer;
my $cgi = new CGI;
if ($cgi->param("user")) {
my $csr = init_consumer($cgi);
my $url;
if ($cgi->param('site')) {
$url = sprintf($cgi->param('site'),$cgi->param('user'));
} else {
$url = $cgi->param('user');
}
print STDERR "URL entered: $url\n";
my $claimed_identity = $csr->claimed_identity($url);
if (! defined $claimed_identity) {
foreach my $par ($cgi->param) {
print STDERR "$par = ".$cgi->param($par)."\n";
}
die "No identity on given URL";
}
my $check_url = $claimed_identity->check_url(
return_to =>
$cgi->url(-full=>1,-query=>0)."?openidvfy=1",
trust_root=>$cgi->url(-base=>1));
print $cgi->redirect(-location=> $check_url);
} elsif ($cgi->param("openidvfy")) {
my $csr = init_consumer($cgi);
if (my $setup_url = $csr->user_setup_url) {
print $cgi->redirect(-location=>$setup_url);
exit(0);
} elsif ($csr->user_cancel) {
print $cgi->header('text/html');
print $cgi->start_html("Login cancelled"),
$cgi->h1("Login cancelled"),
$cgi->p("You've cancelled login on other site"),
$cgi->end_html;
} elsif (my $vident = $csr->verified_identity) {
print $cgi->header('text/html');
print $cgi->start_html("Authentication successful"),
$cgi->h1("Authentication successfull"),
$cgi->p("You've successfully logged into our site as",
$cgi->a({-href=>$vident->url},$vident->display),". Congratulations!"),
$cgi->end_html;
} else {
print $cgi->header('text/html');
print $cgi->start_html("Authentication failed"),
$cgi->h1("Authentication failed"),
$cgi->p("Error validating identity:",
$cgi->escapeHTML($csr->err));
$cgi->end_html;
}
} else {
# Print out form to enter OpenID URL
my %site_list=(
'http://users.livejournal.com/%s'=>'LiveJournal',
'http://lj.rossia.org/users/%s'=>'LJ.Rossia.org',
'http://www.greatestjournal.com/users/%s'=>'GreatestJournal',
'%s','Other (enter full URL into Login field');
print $cgi->header("text/html"),
$cgi->start_html("My test open_id page"),
$cgi->h1("My test open_id page"),
$cgi->start_form(-method=>'POST'),
"Login:",$cgi->textfield(-name=>"user",-size=>40),"<br>",
"Site:",
$cgi->popup_menu(-name=>"site",-Values=>[sort keys(%site_list)],
-labels=>\%site_list),
"<br>",$cgi->submit(-name=>'login',-value=>'Log in'),
$cgi->end_form,
$cgi->end_html;
exit(0);
}
sub init_consumer {
my $cgi=shift;
return Net::OpenID::Consumer->new(
ua => LWP::UserAgent->new(),
args => $cgi,
consumer_secret => 'sdf@!#$AGSADG',
required_root => $cgi->url(-base=>1),
);
}
December 4 2007, 20:02:09 UTC 4 years ago
Тот, кто identifies himself with OpenID, становится одной строчкой для того, кто следит, несмотря на разные логины на разных сайтах.
Госпрограмма тотальной слежки, Total Information Awareness, принята и сегодня энергично воплощается в жизнь всеми большими корпорациями. Сюда подпадают "социальные" сайты, на которых люди сами о себе сообщают множество подробностей, механизмы вроде OpenID и других общих и взаимозаменяемых логинов - дабы collate, совмещать знания из разных мест, равно как и проекты по переносу как можно большего числа функций из домашнего компьютера - on-line ("закладки", "бэкапы", и т.д.) - под предлогом того, что это "удобно" и вы сможете связаться со своими данными "с любого компьютера".
А корпорация, конечно, все правила соблюдения privacy для вас не нарушит.
What load of liquid shit.
Я бы на вашем месте бросил возиться с ТАКИМ протоколом, и для системы распределенных блогов сделал бы удобным и незаметным для пользователя создание собственной пары крипто-ключей (легко) и опознание друзей по автоматическому сравнению этих ключей.
Дабы не возиться с переконфигурацией веб серверов на каждой машине при добавлениии и т.д. можно пользоваться маленькими utilities которые всю эту работу оформляют.
да к тому же они уже есть, на них достаточно просто сослаться в скриптах.
December 4 2007, 20:19:57 UTC 4 years ago
December 4 2007, 20:30:55 UTC 4 years ago
..откуда вы знали?
Вот официальная печать программы:Похоже вы попали в точку. Из википедии:
The IAO uses the eye of Providence from the Great Seal of the United States gazing at the Earth as logo, and the Latin motto scientia est potentia, meaning "knowledge is power". The pyramid has 13 steps, the same of that on the US 1 dollar bill.
As criticism of TIA grew in late 2002, the pyramid logo was removed from the official IAO webpage and replaced with a new logo. In response to questions about its removal, the IAO responded in February 2003 with a "Statement regarding the meaning and use of the IAO logo" published as a FAQ.[24] The original descriptions of the IAO, TIA, and the biographies of senior staffers were also removed from the DARPA web site although they remain widely available on the Internet.[25]
December 4 2007, 20:32:22 UTC 4 years ago
December 4 2007, 21:15:34 UTC 4 years ago
Какие меры вы принимаете для сокрытия своего лица, когда едете в метро?
За privacy бояться в интернет не ходить.
А мне нужно чтобы те, кто сейчас настолько беспечно относится к privacy, что пользуется ЖЖ, после того, как я унесу свой блог на отдельную площадку, могли легко туда ходить и комментировать. Ровно для этого я и хочу чтобы там был OpenID Consumer.,
December 4 2007, 22:16:39 UTC 4 years ago
http://vitus-wagner.livejournal.com/231
Уже есть маленький, быстрый, scaling скрипт-агрегатор, пока на одного пользователя, который можно разрабатывать.
Найдется ли группа желающих работать?
December 4 2007, 21:20:57 UTC 4 years ago
December 4 2007, 21:46:18 UTC 4 years ago
Сходу не вижу в этом месте дырок (в отличие от одноимённой функции в C, которая с удовольствием вывела бы что-нибудь интересное из стека), кроме возможности вывести адрес второго аргумента, но мало ли?
December 5 2007, 07:26:33 UTC 4 years ago
Anonymous
December 5 2007, 07:33:16 UTC 4 years ago
--
mtve
December 5 2007, 07:46:26 UTC 4 years ago
December 15 2007, 14:48:26 UTC 4 years ago
December 12 2007, 03:04:31 UTC 4 years ago
но вот что делать с секретом?
December 30 2007, 20:08:56 UTC 4 years ago
потому и интересно -- можно ли как-нибудь с помощью Net::OpenID::Consumer заюзать SRE и получить email пользователя?
October 1 2008, 21:44:15 UTC 3 years ago
А то работа с его модулем связана с кучей хаков, по-моему.
June 20 2010, 21:04:20 UTC 1 year ago