как 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-адрес идентификатора? Каковы разные термины?

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

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

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