Internet
OpenID 2.0 – co to takiego.
4 years, 2 months ago Dodano w: Internet 0

OpenID – Cyfrowy Identyfikator.

Co nam daje taki identyfikator?. Możemy logować się na portalach obsługujących open ID nie posiadając konta, możemy dodawać komentarze na blogach w tym na word press oraz w innych serwisach korzystających z tej technologii. Otwarta architektura oraz rozproszenie serwerów po całej sieci pozwala na praktycznie 100% zabezpieczenie naszych danych (warto szukać serwerów z obsługą https). W dodatku jest to system darmowy oparty na oprogramowaniu open source znanej z zabezpieczeń firmy versign.

„Jeden login, żeby wszystkie połączyć…” — witaj w świecie cyfrowej tożsamości, która nie wymyka się spod Twojej kontroli!

OpenID

Okazuje się, że po kilku miesiąc intensywnych prac nad OpenID powstało kilka serwisów dzięki którym możemy go używać wygodnie w Sieci.


  • myID.net

    Free OpenID Provider with support for groups and Korean language.

  • myVidoop

    Free OpenID Provider that eliminates passwords with security features, customization, and browser integration.

Mamy też nasz własny Polski serwis OpenId

OpenId.plOpenID.pl

OpenID według Wikipedii:

OpenID – architektura rozproszonego uwierzytelnienia i dystrybucji tożsamości użytkowników w usługach webowych.

OpenID rozwiązuje problem dystrybucji składników tożsamości użytkownika (imię, nazwisko, email, adres itd) pomiędzy wieloma serwisami webowymi (sklepy internetowe, grupy dyskusyjne itd – w specyfikacji OpenID nazywanymi Consumer). Zamiast zakładać niezależne konta w każdym z serwisów, użytkownik zakłada jedno konto na serwerze OpenID, zapisując tam swoje dane osobowe i uzyskując identyfikator OpenID.W momencie logowania do pożądanego serwisu użytkownik podaje identyfikator OpenID, który ma postać adresu URL będącego równocześnie adresem serwera OpenID i wskazaniem konkretnego użytkownika (np. user.openid.pl albo http://openid.pl/user/). Dostęp do tak zapisanej tożsamości jest zabezpieczony hasłem użytkownika.

Serwis przekierowuje użytkownika na stronę serwera OpenID. Użytkownik loguje się swoim hasłem i określa czy dany serwis może pobrać jego dane osobowe, a jeśli tak to jakie i w jakim okresie czasu. Serwis pobiera wskazane informacje i posługuje się nimi np. do podpisywania komentarzy użytkownika na forach dyskusyjnych czy w blogach.

W wersji 2.0 protokołu OpenID identyfikatorem użytkownika może być także XRI.

Filmik przedstawiający korzystanie z OpenID

[googlevideo]http://video.google.com/videoplay?docid=-7463164786703060643[/googlevideo]

 

WordPress i OpenID

(żródło)

 

W tym artykule opowiem o tym, jak umożliwić logowanie za pomocą OpenID do blogów opartych na WordPressie.

Potrzebować będziemy odpowiedniego plug-inu. Okazuje się, że mamy wybór. Istnieją dwa pluginy, które różnią się funkcjonalnością:

  1. Plugin wpopenid VerseLogic jest oparty na bibliotece JanRain. Umożliwia on zakładanie kont w WordPressie po zalogowaniu się przez OpenID. Do jednego konta WordPressa można przypisać kilka identyfikatorów OpenID, jest to bardzo wygodne: gdy jeden z serwerów OpenID nie działa, możemy zalogować się innym identyfikatorem i nadal otrzymamy tą samą ?tożsamość?. Identyfikatorami mogą być zarówno adresy URL jak i i-names. Wpisanie komentarza również oznacza założenie konta. Plugin ten korzysta z protokołu Simple Registration Extension. Oznacza to, że jeżeli użytkownik się zgodzi, a jego serwer OpenID wspiera ten protokół, WordPressowi zostaną przekazane podstawowe dane: imię i nazwisko użytkownika, jego adres e-mail i adres jego strony. Może to wyglądać groźnie, ale wszystko jest pod kontrolą użytkownika, a przekazywane dane są takie same, jak podawane przy dodawaniu komentarza. Oczywiście serwer też musi obsługiwać ten protokół (OpenID.PL go obsługuje). Plugin ten wdrożony jest testowo na blogu nettoblog.com (gdzie można się nim do woli ?bawić?).
  2. Plugin OpenID Comments ma nieco inną funkcjonalność. Przede wszystkim nie służy on do zakładania kont w WordPressie, a jedynie do dodawania komentarzy (o ile blog pozwala na dodawanie komentarzy użytkownikom, którzy nie mają konta). Co ciekawe, implementuje on nie tylko ?klienta? OpenID, ale także serwer. Każdy użytkownik, który ma konto na WordPressie może używać adresu http://adres_bloga/author/użytkownik jako swojego identyfikatora OpenID (administrator używa po prostu adresu bloga). To WordPress będzie jego serwerem. W praktyce okazało się, że nie wystarczy samo posiadania konta, trzeba jeszcze napisać przynajmniej jeden artykuł. Plugin ten wdrożony jest testowo na blogu, który czytasz.

Wydaje się, że plugin wpopenid jest rozwiązaniem bardziej dojrzałym i aktywniej rozwijanym. Kilka uwag o jego instalacji:

  1. Najnowsza wersja znajduje się w repozytorium SVN, skąd można ją pobrać za pomocą klienta svn lub po prostu ściągając pojedyncze pliki, zwłaszcza, że nie ma ich dużo. Ale zanim to zrobimy, lepiej ściągnąć starszą wersję z SourceForge, która zawiera nie tylko plug-in, ale także niezbędne biblioteki. Potem można ją zaktualizować w oparciu o SVN.
  2. Plug-in instaluje się jak każdy inny, umieszczając go w katalogu wp_content/plugins/ i aktywując w panelu administracyjnym WordPressa. To jednak nie koniec: ponieważ logowanie OpenID wymaga podania jedynie identyfikatora, plug-in ten modyfikuje (lub przynajmniej stara się zmodyfikować) niektóre pliki tworzące skórkę bloga (można to wyłączyć). Czasem nie wygląda to zbyt ładnie, trzeba mu więc pomóc ręcznie.
  3. Po zainstalowaniu napotkałem na kilka drobnych problemów:
    1. Jeżeli mamy włączone moderowanie komentarzy i komentarz dodany za pomocą OpenID trafi do kolejki, użytkownik nie jest o tym fakcie informowany. Jest to ewidentny błąd, który zapewne będzie poprawiony (sam będę próbował go poprawić).
    2. Miewałem problemy z dodawaniem dodatkowych identyfikatorów OpenID do profilu. Po dodaniu identyfikatora (i zweryfikowaniu, że należy do mnie) wyświetlała się pusta strona lub komunikat o błędzie. Po ponownym wejściu do panelu administracyjnego okazywało się, że wszystko jest w porządku.
    3. Jak wspomniałem na wstępie, plugin pobiera podstawowe dane użytkownika z serwera OpenID i wpisuje je do profilu w WordPressie. Jednak ?nazwą wyświetlaną? jest domyślnie identyfikator użytkownika. Jeśli ma nią być jego imię i nazwisko, użytkownik musi sobie to przestawić w profilu WordPressa. Ustawienie to nie działa wstecz, więc jeśli konto zostało założone przez dodanie komentarza, pierwszy komentarz będzie podpisany identyfikatorem użytkownika.

Generalnie OpenID jest łatwe do zaimplementowania w php. Oto przykład:

include 'class.openid.php';

if ($_POST['openid_action'] == "login"){ // Get identity from user and redirect browser to OpenID Server
	$openid = new SimpleOpenID;
	$openid->SetIdentity($_POST['openid_url']);
	$openid->SetTrustRoot('http://' . $_SERVER["HTTP_HOST"] .'/ŚCIEŻKA/DO/openid-example.php');
	$openid->SetRequiredFields(array('email','fullname'));
	$openid->SetOptionalFields(array('dob','gender','postcode','country','language','timezone'));
	if ($openid->GetOpenIDServer()){
		$openid->SetApprovedURL('http://' . $_SERVER["HTTP_HOST"] .'/ŚCIEŻKA/DO/openid-example.php');  	// Send Response from OpenID server to this script
		$openid->Redirect(); 	// This will redirect user to OpenID Server
	}else{
		$error = $openid->GetError();
		echo "ERROR CODE: " . $error['code'] . "";
		echo "ERROR DESCRIPTION: " . $error['description'] . "";
	}
	exit;
}
else if($_GET['openid_mode'] == 'id_res'){ 	// Perform HTTP Request to OpenID server to validate key
	$openid = new SimpleOpenID;
	$openid->SetIdentity($_GET['openid_identity']);
	$openid_validation_result = $openid->ValidateWithServer();
	if ($openid_validation_result == true){ 		// OK HERE KEY IS VALID
		echo "ZALOGOWANY POPRAWNIE";
	}else if($openid->IsError() == true){			// ON THE WAY, WE GOT SOME ERROR
		$error = $openid->GetError();
		echo "ERROR CODE: " . $error['code'] . "";
		echo "ERROR DESCRIPTION: " . $error['description'] . "";
	}else{											// Signature Verification Failed
		echo "INVALID AUTHORIZATION";
	}
}else if ($_GET['openid_mode'] == 'cancel'){ // User Canceled your Request
	echo "USER CANCELED REQUEST";
}

Wstawiamy formę:


<form action="openid-example.php" method="post" onsubmit="this.login.disabled=true;">
<input type="hidden" name="openid_action" value="login"><input type="text" name="openid_url" class="openid_login"><input type="submit" name="login" value="login">
</form>

i dodajemy ciasteczka:

// tajny łańcuch zabezpieczający hasze przed podmianą
define('SECRET_KEY', 'małpa w czerwonym jest ojcem dziecka anety krawczyk');
include 'class.openid.php';

// wylogowanie - usuń cookie i przekieruj
IF(isset($_GET['logout']))
	{
	setcookie("openid_cookie", NULL, time()-172800, '/', '', '0');
	header('Location: openid-example.php');
	}

// jeżeli jest cookie to user zalogowany
IF(isset($_COOKIE['openid_cookie']))
	{
	$array = unserialize(base64_decode($_COOKIE['openid_cookie']));
	IF(is_array($array) and $array['hash'] =  sha1(SECRET_KEY.$array['id']))
		{
		echo '<h1>Zalogowany przez openID jako <a href="'.$array['id'].'">'.$array['id'].'</a></h1><a href="openid-example.php?logout=ok">wyloguj</a>';
		}
	else
		{
		echo 'Błędne Cookie';
		}
	}
// brak cookie - logowanie za pomocą openID
else
	{
	if ($_POST['openid_action'] == "login")
		{ // Get identity from user and redirect browser to OpenID Server
			$openid = new SimpleOpenID;
			$openid->SetIdentity($_POST['openid_url']);
			$openid->SetTrustRoot('http://' . $_SERVER["HTTP_HOST"] .'/ŚCIEŻKA/DO/openid-example.php');
			$openid->SetRequiredFields(array('email','fullname'));
			$openid->SetOptionalFields(array('dob','gender','postcode','country','language','timezone'));
			if ($openid->GetOpenIDServer()){
				$openid->SetApprovedURL('http://' . $_SERVER["HTTP_HOST"] .'/ŚCIEŻKA/DO/openid-example.php');  	// Send Response from OpenID server to this script
				$openid->Redirect(); 	// This will redirect user to OpenID Server
			}else{
				$error = $openid->GetError();
				echo "ERROR CODE: " . $error['code'] . "<br />";
				echo "ERROR DESCRIPTION: " . $error['description'] . "<br />";
			}
			exit;
		}
	else if($_GET['openid_mode'] == 'id_res')
		{ 	// Perform HTTP Request to OpenID server to validate key
			$openid = new SimpleOpenID;
			$openid->SetIdentity($_GET['openid_identity']);
			$openid_validation_result = $openid->ValidateWithServer();
			if ($openid_validation_result == true){ 		// OK HERE KEY IS VALID
				// dane poprawne - tworzymy cookie i przekierowujemy
				$array = array('id' => $_GET['openid_identity'], 'hash' => sha1(SECRET_KEY.$_GET['openid_identity']));
				setcookie("openid_cookie", base64_encode(serialize($array)), time()+172800, '/', '', '0');
				echo 'ZALOGOWANY POPRAWNIE<br />Przenoszę na stronę główną<meta HTTP-EQUIV="Refresh" CONTENT="1; URL=openid-example.php">';
				exit();
			}else if($openid->IsError() == true){			// ON THE WAY, WE GOT SOME ERROR
				$error = $openid->GetError();
				echo "ERROR CODE: " . $error['code'] . "<br />";
				echo "ERROR DESCRIPTION: " . $error['description'] . "<br />";
			}else{											// Signature Verification Failed
				echo "INVALID AUTHORIZATION";
			}
		}else if ($_GET['openid_mode'] == 'cancel')
		{ // User Canceled your Request
		echo "USER CANCELED REQUEST";
		}
	echo '<form action="openid-example.php" method="post" onsubmit="this.login.disabled=true;">
<input type="hidden" name="openid_action" value="login"><input type="text" name="openid_url" class="openid_login"><input type="submit" name="login" value="login">
</form>';
	}

Powinno działać.

Na tym blogu mam zamiar w najbliższym czasie wprowadzić system OpenID. Na razie jest on w fazie testów, ale będę Was informował na bieżąco.

Dodaj komentarz