OpenID и аккаунты пользователей

Если вдруг кто не в курсе - OpenID это такой хитрый протокол, который позволяет аутентифицироваться, указывая некий URL (обычно HTTP’шный). По этому локатору сервер получает адрес сервера аутентификации и имя пользователя.

OpenID может оказаться (и скорее всего окажется) мощной силой, связывающей между собой разные социальные сети, особенно если сервисы будут предоставлять кое-какую машиннопонятную информацию. Например, представим себе что ЖЖ начинает экспортировать список френдов конкретного пользователя в виде, скажем, FOAF; а last.fm в рамках того же предположения мониторит этот список и предлагает добавлять во френды соответствующих ластфмщиков - идентификаторы пользователей-то одни и те же. Не очень правильное с архитектурной точки зрения решение, но весьма простое и дешевое.

Однако поставщики сервисов должны понять, что OpenID - это лишь способ аутентификации, а не отдельная категория пользователей. Идеален вариант, когда пользователь имеет возможность заменить свой screen name на OpenIDентификатор, значительно хуже - если можно лишь просто им аутентифицироваться. Тот же ЖЖ, например, пошел по совершенно другому, на мой взгляд, тупиковому пути - при первом входе в систему через OpenID создается новый, крайне ограниченный аккаунт. Нельзя вести блог (вероятно, предполагается, что всякий имеющий OpenID имеет его если не на выделенном блог-движке, то как минимум - от другой блоггинговой службы). Нельзя писать и в коммунити. Не отображается профль пользователя, хотя адрес FOAF-дескриптора явно указан на страничке, которую ЖЖ каждый раз грузит при входе в систему. Даже нельзя указать емайл и получать нотифаи об ответах на комментарии.

Что из этого следует - при создании новых систем следует четко отделять информацию, относящуюся к безопасности (пару логин-пароль, например) от собственно пользователя системы. Например: существуют два класса с единым интерфейсом Identity, один представляет plain old screen name, другой - OpenIDentity. Идентити агрегируется в объект пользователя (двусторонняя ассоциация), возможно, даже стоит иметь коллекцию из идентити.

Интересный результат также можно получить, если устанавливать отношения типа френдов от пользователя к идентити другого пользователя, или между идентити. В первом случае получается связь, не зависящая от того, как аутентифицировался пользователь, во втором - структура, практически готовая к выходу в семантический веб.


О записи