Сохранение необходимой информации OpenID

Я пытаюсь реализовать аутентификацию OpenID для своего сайт. Вот сценарий:
Я хочу, чтобы пользователь мог

  • входить в систему, используя только openId (пользователь может просто пройти проверку, посетив провайдера openid. Нет необходимости создавать индивидуальную учетную запись с адресом электронной почты- пароль),
  • По электронной почте / паролю (пользователь зарегистрировался на сайте, заполнив форму)
  • Прикрепите открытые идентификаторы к своим учетным записям (openids + электронная почта для одной учетной записи).

Теперь я не знаю, какие учетные данные я должен хранить для открытого идентификатора. и не уверен в схеме БД.Вот схема базы данных:

Table: Users
UserId => PK
... => Custom info. Not related to authentication.

Table: Authentication  
AuthenticationId => PK
LoginId => (when custom site membership => email address) (when openId => openid unique address)

UserId  => FK to Users.
Provider =>(when custom site membership => "CUSTOM") (when openId => openid provider address)  
Password => filled when using custom membership. empty when using open id.

Теперь, когда пользователь входит в систему, независимо от того, используется ли членство в openid / custom, я просто смотрю на таблицу аутентификации, ищу учетные данные и получаю подходящего пользователя. Если пользователей нет, я создаю нового пользователя и добавляю запись в таблицу аутентификации.

  • Главный вопрос: достаточно ли хранения Provider и LoginId (см. Комментарии выше, чтобы узнать, что хранится в этих полях) для хранения аутентификации openid? Должен ли я хранить какие-либо дополнительные данные, чтобы при возвращении пользователя я мог аутентифицировать его / ее на основе моих сохраненных данных?

  • Вы предлагаете какой-либо другой (более эффективный) подход для реализации этого?
    Спасибо.

10
задан Kamyar 17 September 2011 в 19:53
поделиться