OpenID Connect 1.0 позволяет клиентам проверять личность конечного пользователя на основе аутентификации, выполняемой сервером авторизации, и предоставляет утверждения в обмен на токен доступа. Маркер доступа предоставляется /user_info
или /me
конечной точке, чтобы получить взамен запрошенные утверждения.
Раздел 3.1.2.3 в Спецификация OpenID Connect 1.0 объясняет процесс аутентификации конечного пользователя. Однако в нем четко говорится
Методы, используемые сервером авторизации для аутентификации конечного пользователя (например, имя пользователя и пароль, файлы cookie сеанса и т. Д.), Выходят за рамки данной спецификации.
Реализация этих методов и есть мой вопрос. Кроме того, спецификация OAuth2.0 также не предоставляет никакой информации о реализации.
У меня есть сомнения в том, как аутентифицировать конечного пользователя? Возможные случаи, о которых я мог подумать, следующие:
- Мы храним некоторые данные пользователя, такие как информация о его профиле, имя пользователя, пароль, на сервере авторизации и другую информацию, связанную с пользователем, на сервере ресурсов.
- Мы храним все на сервере ресурсов и проверяем учетные данные пользователя, отправляя
POST
запрос вместе с учетными данными пользователя во внутренний API отдыха на сервере ресурсов. - Сервер авторизации и ресурсов использует один и тот же экземпляр БД и, следовательно, не имеет вызовов API.
Я знаю, что реализация одного провайдера OpenID будет отличаться от других, но я хочу знать, подходят ли эти подходы к любому провайдеру OpenID?
В некоторых случаях сервер авторизации и сервер ресурсов могут быть одинаковыми, и в этом случае совместное использование экземпляра базы данных станет простым. Но что происходит в случае, если серверы - это две разные машины.
Допустим, я пытаюсь написать свою собственную реализацию OpenId Connect. Какие предложения вы бы дали мне для аутентификации конечных пользователей?
Я попытался просмотреть базу кода библиотеки node-oidc-provider, но библиотека не не аутентифицирует пользователя и пропускает эту часть. Было бы очень полезно, если бы кто-нибудь мог дать какие-либо указания по этому поводу. Какой должна быть лучшая практика? Какие методы использует любой другой поставщик OpenID?