Протокол WebFinger

Я полюбляю розбиратися з новими можливостями, що надає веб. На цей раз мене зацікавив протокол Webfinger, який розширює можливості електронної пошти та робить її аналогом OpenID.

Детальніше про нього можна почитати тут: Introducing WebFinger та тут: Implementing WebFinger.

В цьому дописі я хочу розказати, як працює цей протокол на прикладі інтеграції Webfinger з блоґом. На жаль поки Webfinger підтримується лише в Gmail Accounts та Google Accounts (бо його розробники — працівники Google), але це не забороняє використовувати Webfinger з будь-яким доменом та адресою.

Отже ми маємо користувача з адресою sample-user@gmail.com.
Перевіряємо, чи є на цьому домені файл gmail.com/.well-known/host-meta
Якщо є — шукаємо рядок <Link rel=”lrdd” template=”http://www.google.com/s2/webfinger/?q={uri}”> з адресою, за якою можна дізнатися додактову інформацію про цю поштову скриньку.

Якщо у вас є пошта на власному домені (наприклад як у мене mrgall [пес] mrgall.com), то підтримку Webfinger можна додати доволі просто: створюємо xml файл example.com/.well-known/host-meta з таким вмістом:

<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0" xmlns:hm="http://host-meta.net/xrd/1.0">
<hm:Host xmlns="http://host-meta.net/xrd/1.0">gmail.com</hm:Host>
<Link rel="lrdd" template="http://www.google.com/s2/webfinger/?q=mrgallua@gmail.com">
<Title>
Resource Descriptor
</Title>
</Link>
</XRD>

mrgallua@gmail.com це не поштова скринька, це мій Google Account mrgallua, зареєстрований на адресу mrgall [пес] mrgall.com (чому тут потрібно дописувати домен gmail.com — питання до розробників протоколу 🙂
Єдиний недолік цього методу — всі адреси @mrgall.com будуть мати одну і ту саму WebFinger адресу (але в мене є лише один поштовий екаунт на цьому домені 🙂

Якщо в адресі є параметр {uri} то його треба замінити поштовою адресою — має вийти щось типу:
http://www.google.com/s2/webfinger/?q=sample-user@gmail.com

За цією адресою отримуємо ось такий xml-файл:

<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
<Subject>
acct:mrgallua@gmail.com
</Subject>
<Alias>http://www.google.com/profiles/mrgallua</Alias>
<Link rel="http://portablecontacts.net/spec/1.0" href="http://www-opensocial.googleusercontent.com/api/people/"/>
<Link rel="http://portablecontacts.net/spec/1.0#me" href="http://www-opensocial.googleusercontent.com/api/people/101951818361875030944/"/>
<Link rel="http://webfinger.net/rel/profile-page" href="http://www.google.com/profiles/mrgallua" type="text/html"/>
<Link rel="http://microformats.org/profile/hcard" href="http://www.google.com/profiles/mrgallua" type="text/html"/>
<Link rel="http://gmpg.org/xfn/11" href="http://www.google.com/profiles/mrgallua" type="text/html"/>
<Link rel="http://specs.openid.net/auth/2.0/provider" href="http://www.google.com/profiles/mrgallua"/>
<Link rel="describedby" href="http://www.google.com/profiles/mrgallua" type="text/html"/>
<Link rel="describedby" href="http://s2.googleusercontent.com/webfinger/?q=mrgallua%40gmail.com&fmt=foaf" type="application/rdf+xml"/>
<Link rel="http://schemas.google.com/g/2010#updates-from" href="https://www.googleapis.com/buzz/v1/activities/101951818361875030944/@public" type="application/atom+xml"/>
</XRD>

Нас цікавить виділена адреса, за якою отримуємо json файл з базовою інформацією: ім’я, прізвище, адреса профілю та аватари (thumbnailUrl).

Я доволі просто інтегрував отримання аватарів за допомогою WebFinger в цей блоґ. Якщо користувач не має Google Profile або аватари на ньому — використовується старий спосіб — Gravatar.

Погратися з WebFinger можна тут: webfinger.org та тут: WebFinger client

На закуску: сторінка з аватарами (отриманих з Google Profile або Gravatar) усіх користувачів, які колись залишали коментар в моєму блозі в порядку спадання кількості коментарів: http://mrgall.com/site/wfa/test.php (>200 картинок).

  • Хм… Ну разместил и у себя этот файл. Но говоря честно, мало понял смысл этого всего.

    Я ж правильно сделал, если разместил файл, полученный по адресу http://www.google.com/s2/webfinger/?q=sample-user@gmail.com ? Или надо было только то, что ты выставил сначала (код по-меньше)?

  • Kichrum,
    трохи не так, глянь приклади:
    http://mrgall.com/.well-known/host-meta
    http://gmail.com/.well-known/host-meta

  • А, теперь понял. Значит, первым кодом автоматически получается доступ ко второму. А я просто второй сгенерил и вставил… Ну сейчас заменил. Но честно говоря, особо все-равно не понял “ширины применения”, кроме твоего блога (хотя и на нем не вижу никаких особенностей)…

  • Гм… Так я Сергей. Вот теперь вижу =) Имя взяло с жмейла, чтоль? А то у меня и в OpenID всё это вроде прописано было нормально…

  • Нет, это ты видимо что-то все-таки с OpenID намудрил – заставил выводить имя вместо ника 🙂

  • Kichrum,
    зараз в мене в блозі з WebFinger береться лише аватара (замість Gravatar), можливо в майбутньому буде ще щось 🙂
    а щодо практичного використання — з нього буде користь лише коли його почнуть підтримувати багато сервісів (як OpenID)

  • Kichrum,
    ось розширена інфа з WebFinger про мене: http://webfinger.org/lookup/mrgall@mrgall.com