Как OpenID отличается между разными логинами на одной конечной точке OpenID

Я пытаюсь реализовать собственную конечную точку OpenID на основе учетных записей пользователей SMF. Я основал свой код на phpMyOpenID и некотором коде авторизации SMF.

Пока все отлично работает. Я могу использовать конечную точку для входа / регистрации на любом сайте. Если я не вошел в систему на SMF, он запросит мой логин, и если этот вход SMF успешен, он примет его.

Тем не менее, кажется, что он не отличается между различными именами входа SMF. Т.е. другой пользователь сообщил, что он пытался использовать конечную точку на сайте X, вошел в систему со своей учетной записью SMF и попал в мою учетную запись пользователя на сайте X (я ранее зарегистрировал конечную точку OpenID на этом сайте).

Я предполагаю, что должен как-то отправить логин SMF или сделать его уникальным для каждого логина SMF. Поскольку это, вероятно, тривиально, что я должен сделать, я решил спросить здесь о SO - может быть, есть и другие вещи, которые мне нужно исправить.

Код (только PHP), если вы хотите посмотреть, здесь: http://github.com/albertz/smf-openid-server

Или, может быть, просто опишите, что мне нужно сделать, чтобы сделать его уникальным для каждого входа в SMF.

Другой проект, который я планирую, - клиент OpenID в многопользовательской игре C++. Хостер будет иметь возможность разрешить вход только от людей, которые могут проходить аутентификацию через OpenID. Также я хочу разрешить вход в систему только определенным людям. Как часто можно получить уникальную строку, основанную на логине OpenID? В этом случае я подумал о чем-то вроде http://{smf-openid-endpoint}/{smf-user} или же http://www.google.de/profiles/{google-user}, Какой канонический способ получить такую ​​строку?

Я думаю, что этот другой вопрос может быть связан с моим основным вопросом, поэтому я также ставлю его здесь.


См. Также связанный вопрос: Является ли URL-адрес идентификатора уникальным? Каковы разные условия?

1 ответ

Решение

Кажется, первый запрос от конечного пользователя, который я получаю, это checkid_setup. В этом ответе я могу указать уникальный URL (то, что я называю уникальной строкой в моем вопросе) в openid.identity поле.

Я сделал это в своем коде сейчас, и, кажется, работает. Т.е. я могу ввести общий URL-адрес конечной точки OpenID (например, в SourceForge), и он будет автоматически расширяться так, как я предложил в своем вопросе.

Чтобы ответить на мой второй вопрос: Кажется, что проверенный идентификатор URL-адреса сам по себе уникален, так что это можно использовать. При этом иногда это может выглядеть загадочно (например, в случае с Google, это всего лишь хэш). Так что это может быть использовано внутри, чтобы отличаться между разными пользователями. Для графического представления я могу показать реальное имя пользователя или почтовый адрес, который я также должен получить от аутентификации OpenID.

Другие вопросы по тегам