Wordpress + OpenID + Greasemonkey + PHP = …

Największą wadą OpenID w tej chwili jest fakt, że nawet mając już konto na serwerze tożsamości, nie bardzo jest do czego swój identyfikator wykorzystać. Z Wikitravel czy Mag.nolii raczej nie korzystam, a blogów, które umożliwiają dodawanie komentarzy z wykorzystaniem OpenID (zamiast standardowego Nick + E-mail) jest w tej chwili ledwie kilkanaście, jeśli weźmiemy pod uwagę blogi polskojęzyczne. Logowanie się za pomocą OpenID jest bardzo wygodne, gdy raz się tego spróbuje, wpisywanie swoich danych przy rejestracji/dodawaniu komentarza/postu/etc. przychodzi z dużym trudem. Dlatego, nie czekając aż OpenID upowszechni się mocniej, postanowiłem sam umożliwić sobie korzystanie z niego w większej ilości serwisów.

Pomysł jest dość prosty. Jako platformę docelową wybrałem Wordpressa, ponieważ jest najpopularniejszą platformą blogową. Przy użyciu skryptu Greasemonkey dodaję do formularza dodowania komentarzy pole na idenyfikator OpenID. Oczywiście, jeśli ktoś zmienił atrybut id bądź action formularza, mój user.js pominie formularz i z OpenID nici. Na szczęście, w zasadzie nie ma potrzeby zmiany tych atrybutów, chyba, że ktoś ma zainstalowany plugin OpenID. W ten sposób wykluczone jest pojawienie się dwóch pól na identyfikator. Oprócz dodania dodatkowego pola, user.js zmienia także atrybut action formularza, tak, by formularz został wysłany na zewnętrzny serwer. Na tym serwerze czeka już prosty skrypt, który zapisuje dane z formularza do sesji i korzystając z podanego identyfikatora OpenID przekierowuje do dostawcy tożsamości. Tam następuje standardowa procedura potwierdzania tożsamości, po czym następuje przekierowanie do kolejnego małego skryptu PHP, na tym samym zewnętrznym serwerze. Te dane to oczywiście nick i e-mail, niezbędne do dodania komentarza. Skrypt wyciąga dane zachowane w sesji i w połączeniu z danymi od serwera tożsamości tworzy żądanie CURL i dodaje komentarz na blogu. Mówiąc krótko, zewnętrzny serwer pośredniczy w komunikacji blog <-> dostawca tożsamości.

Sporządziłem proof-of-concept tego pomysłu. Jest jeszcze kilka niedoróbek, na razie testowałem to tylko na mojej lokalnej instalacji Wordpressa, ale nie widzę powodu, dla którego nie miałoby to działać gdzie indziej. Aby przetestować to rozwiązanie, potrzebny jest Firefoks z rozszerzeniem Greasemonkey, konto u dostawcy tożsamości i ten mały skrypcik – wp-openid.user.js.

Po instalacji na większości blogów opertych na Wordpress formularz dodawania komentarzy powinien mieć taki oto dodatek:

Formularz

Wpisujemy nasz identyfikator OpenID, kilkamy w submit i po chwili powiniśmy wylądować na stronie naszego dostawcy tożsamości. Dodatkowo, jeśli wypełnimy pole Website, nasz nick będzie podlinkowany do podanej tam strony, zamiast do naszego identyfikatora.

Wracając do niedoróbek:

  • nie działa dodawanie komentarzy za pomocą delegowanego identyfikatora
  • skrypt uniemożliwia tradycyjną metodę dodawania komentarzy
  • jeśli pojawi się błąd, będzie on zaprezentowany w niezbyt ładnej formie, na stronie zewnętrzenego serwera

Oczywiście, wszystkie te niedoróbki kiedyś zostaną poprawione.

Zdaję sobie sprawę, że jest to rozwiązanie okrężną drogą i dużo lepiej byłoby, gdy ludzie, a przedewszystkim duże serwisy przeszły na OpenID. Ale póki co, takie rozwiązanie może zachęcić do tworzenia sobie identyfikatorów. A wraz ze wzrostem ilości osób posiadających swój identyfikator, wzrośnie też nacisk na twórców serwisów, by wdrażać rozwiązania na OpenID oparte.

Rozwiązanie ma jeszcze jedną, dość sporą wadę, którą jest zaufanie. Użytkownik takiego skryptu musi najpierw zaufać dostawcy tożsamości, a potem dodatkowo jeszcze mnie. Oczywiście, mogę zapewnić, że zapisywane są dane tylko niezbędne do komunikacji z serwerem tożsamości, czyli w zasadzie nic o samym użytkowniku, który ze skryptu korzysta, ale w internecie takie zapewnienie jest niewiele warte. Udostępnienie kodu źródłowego skryptów PHP działających na moim serwerze też rozwiązaniem nie jest, bo mogłem je wysłać na serwer z zmienionej formie. Dlatego jeśli nie masz do mnie zaufania, po prostu nie instaluj skryptu do Greasemonkey.

Najlepszym rozwiązniem problemu zaufania byłoby, gdyby to dostawca tożsamości udostępniał mechanizm umozliwiający działanie tego skryptu. Skoro użytkownik raz mu juz zaufał, to nie będzie problemów z ponownym powierzeniem zaufania. Ale w tym stadium skrypt nie nadaje się jeszcze do wejścia na głęboką wodę. Alternatywą, dość uciążliwą, jest instalacja niezbędnych plików na własnym serwerze. Wymaga to instalacji biblioteki do obsługi OpenID – PHP OpenID, oraz pobrania, rozpakowania i dostosowania do własnych potrzeb plików PHP i skryptu Gresemonkey. Jeśli ktoś się chce pobawić albo rozejrzeć, proszę bardzo.

Kończąc ten przydługi wpis, pozostaje mi tylko prosić o zgłaszanie wychwyconych błędów na maila (w dziale kontakt), bądź w komentarzach do tego wpisu.

  1. Marcin mówi:

    Bardzo dobry pomysł. OpenID to porządne rozwiązanie.

  2. Na całkiem dobry pomysł wpadłeś trzeba przyznać… I wypróbować. :)

  3. Testuję Open ID, działa?

  4. ciekawe czy zadziala

  5. Jeszcze jeden test.

  6. Może jeszcze kilka testów będzie. Możesz Cudi usunać te mojej spamy. Przepraszam :P

  7. plo.net.pl mówi:

    Test działania :D

  8. Podobnie jak koledzy, testuje :)

  9. michael hebel mówi:

    Hi! The post is really interesting! I

  10. fran bohan mówi:

    Great topic, nice message. Thank you.,

  11. Nice post. Thanks for sharing. You can watch live steraming soccer tv in my blog. Thanks,

  12. rallu severin mówi:

    I think its good decision what he did.,

  13. Lawrence Pon mówi:

    great tips. I enjoyed reading this,

  14. kris workman mówi:

    Hi! The post is really interesting! I

  15. Hey! I just searched for and I found your site!,

  16. Jamie Estep mówi:

    great tips. I enjoyed reading this,

  17. lori moss mówi:

    cool, i will bookmark it,

  1. [...] Cudok podszedł do problemu logowania do Wordpressa w zupełnie inny sposób. Jego rozwiązania nie wymaga żadnych zmian w kodzie systemu blogowego. Działa na wszystkich [...]

Leave a Reply