Реализация системы единого входа (на основе протокола OAuth2.0)
Реализация системы единого входа (на основе протокола OAuth2.0)

Недавно я внедрил единый вход после праздника. Различные проекты требуют системы управления учетными записями. Это слишком хлопотно, из-за чего различные проекты становятся корявыми и лень писать (зачеркнуть).

OAuth 2.0 Соглашение (далее именуемое OAuth) — это протокол трехсторонней авторизации. В настоящее время большинство сторонних входов и авторизаций основаны на стандартной или улучшенной реализации этого протокола. OAuth 1.0 Стандарт 2007 Выпущена в 2018 году, 2.0 Стандарт 2011 Издано в 2016 году, в том числе 2.0 стандарты отменяют все Token из Процесс шифрования и упрощенный процесс авторизации, но в связи с обязательным использованием HTTPS протокол, считающийся более безопасным, чем 1.0 стандарты.

Основные понятия

В понимании OAuth Прежде нужно понять каждое существительное из Основные. понятия

Клиент: клиент является стороной доступа OAuth, и его цель — запросить защищенные ресурсы пользователя, хранящиеся на сервере ресурсов. Можно понимать как интерфейсные приложения (такие как Интернет, приложения, апплеты и т. д.).

Пользовательский агент (UA): инструменты для участия пользователей в Интернете, такие как браузеры, системные идентификаторы и т. д.

Владелец ресурса: объект, которому принадлежит защищенный ресурс, например владелец ресурса (это вы!!), пользователь ниже является владельцем ресурса.

Сервер авторизации. Сервер, проверяющий личность владельца ресурса, — это то, что все обычно называют «сервером входа».

Сервер ресурсов: сервер, на котором размещаются ресурсы и который может получать и отвечать на запросы доступа к ресурсам, содержащие токены. Его можно понимать как серверную программу клиента.

Токен доступа: это то, что мы обычно называем токеном (токеном доступа). Это учетные данные авторизации, выданные сервером авторизации клиенту с авторизацией пользователя (владельца ресурса), который может иметь клиент (или сервер ресурсов, или кто-либо еще). it Этот токен осуществляет доступ к защищенному ресурсу от имени владельца ресурса.

Токен обновления: это то, что мы обычно называем «двойным токеном» (токен обновления). Его функция заключается в обновлении токена доступа. Токены доступа обычно недолговечны. Использование токенов обновления для повторного обмена токенами доступа может в определенной степени снизить нагрузку на сервер авторизации и владельцев ресурсов.

Адрес обратного вызова: OAuth2.0 — это тип протокола авторизации, основанный на обратных вызовах. В форме перенаправления 302 он может в определенной степени упростить операции клиента.

Область авторизации: пользователи могут указать диапазон защищенных ресурсов, к которым клиент может получить доступ, например, личные идентификационные номера налогоплательщика, псевдонимы, адреса электронной почты и т. д.

Процесс авторизации

OAuth Протокол определен 4 режима авторизации (режим кода авторизации、Режим неявной авторизации、Режим авторизации по паролю владельца ресурса、клиент Режим авторизации учетных данных),Наиболее представительным является режим кода авторизации.,А еще я использую этот режим для авторизации из,Поэтому в этой статье объясняется только этот режим. если нужно знать о других шаблонах,Открытая платформа Xiaomi подробно описана в статье.,Можешь пойти и посмотреть,Конкретные ссылки можно найти в разделе «Ссылки» внизу этой статьи.

Шаблон кода авторизации на протяжении всего процесса авторизациии 1.0 Версия наиболее близкая, но весь процесс тоже нужно сильно упростить. OAuth2.0 Самая стандартная и широко используемая модель авторизации. Этот тип модели авторизации очень подходит для приложений с серверной частью. Конечно, их сейчас большинство. APP У каждого свой сервер, поэтому большинство APP из OAuth Авторизацию можно получить по Коду авторизациимодель,На рисунке ниже показана последовательность взаимодействия между различными ролями кода авторизации (здесь пользователям разрешено непосредственное участие в нем),Пользовательский агент опущен):

Полное описание процесса авторизации приведено ниже (пояснения конкретных параметров см. ниже):

  1. клиент несет client_id, scope, redirect_uri, state Дождитесь информации, которая поможет пользователю запросить сервер авторизации для выдачи конечной точки авторизации. code
  2. Авторизоватьсервер Проверить личность клиента,Если проверка пройдена, пользователю будет задан вопрос, согласен ли он на авторизацию (в это время произойдет переход на страницу авторизации, где пользователь сможет интуитивно увидеть страницу авторизации),Подождите, пока пользователь нажмет кнопку для подтверждения авторизации)
  3. Если пользователь согласен на авторизацию, авторизация будет code и состояние (есликлиент передал этот параметр) вмонтировано в redirect_uri Позже его выпустят в виде 302. code
  4. код переноса клиента, redirect_uri, а также client_secret Запросить авторизацию сервериз, выдать токен конечной точки access_token (Этот шаг на самом деле выполняется через клиентский сервер, за исключением code,Другие параметры добавляются на стороне приложения.,Подробно обсудим ниже)
  5. Авторизоватьсервер Проверить личность клиента,Также проверьте код,а также redirect_uri Будь и запрос code всегда одинаковы и будут выданы после прохождения проверки. access_token и выборочно выдать его refresh_token

Приложение на основе аккаунта Nya

Создать приложение

Обратите внимание, что на практике эта часть может быть изменена. Подробную информацию см. в документации по использованию учетной записи Nya.

доступ https://account.lolinya.net/ , в соответствии с процессом Авторизоваться / зарегистрироваться счет

В «Управлении приложениями» выберите «Создать». приложение,Во всплывающем модальном окне,Войдите в новое приложение. Это имя будет отображаться пользователю. Можно изменить позже.

Затем нажмите кнопку «Просмотреть подробности» на панели действий списка приложений.,Приложение настройки из Введения, URL-адрес перенаправления, а также необходимые из Разрешения,После завершения настройки необходимо нажать кнопку Сохранить.

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

После настройки вы можете просмотреть идентификатор клиента и ключ клиента здесь.

Получить код авторизации

Код авторизации: Процесс. авторизацииизпромежуточный временный сертификат,Это временный сертификат, подтверждающий авторизацию пользователя.,Его жизненный цикл, как правило, короткий (протокол рекомендует, чтобы он не превышал 10 минут).,В течение этого действительного периода времени,клиент может использовать этот временный сертификат для авторизации сервера в обмен на токены доступа.

302 перенаправляет пользователей на этот адрес

Язык кода:javascript
копировать
https://account.lolinya.net/authorize

и переносить параметры запроса

Имя параметра

Это необходимо

Описание информации

client_id

должен

клиентID,используется для идентификации клиента,Генерируется при применении регистрации (т. е. AppId)

state

рекомендовать

Используется для поддержания статуса во время процесса запроса и обратного вызова.,Предотвращение CSRF-атак,сервер ничего не делает с этим параметром,есликлиент несет этот параметр,Тогда в ответ сервер будет возвращен без изменений.

redirect_uri

Необязательный

Адрес обратного вызова для авторизации (чтение по умолчанию настраивается при применении регистрации)

scope

Необязательный

Разрешенияобъем,Используется для контроля клиентских решений.,есликлиент Параметр не передан,Затем сервер заменяется всеми Разрешениями приложения (все Разрешения читаются по умолчанию при настройке регистрации из)

response_type

Необязательный

Для режима кода авторизации response_type=code это значение по умолчанию, и его не нужно передавать отдельно.

После завершения авторизации пользователь будет перенаправлен на Создать. приложение при указании адреса, и переносить параметры запрос(если пользователь отказывает в авторизации, то code=deny

имя

Описание информации

code

Код авторизации,Код авторизации представляет собой подтверждение авторизации пользователя и временные учетные данные.,Можно использовать только один раз,Действует в течение 5 минут

state

Если клиент передает этот параметр, он будет возвращен без изменений.

Выдать токен доступа

Авторизоватьсервер Распространение Код авторизациипосле,клиент или ресурсный сервер,Перенесу только что выпущенныйиз Код авторизации Запросите следующий адрес

Язык кода:javascript
копировать
https://api.liyxi.com/node/v0/token

(Зеркальный сервер в материковом Китае, скорее всего, изменится, в основном на основании документации по использованию)

Перенос тела запроса

имя

Это необходимо

Описание информации

grant_type

должен

Для режима кода авторизацииgrant_type=authorization_code

code

должен

Получить предыдущий шагиз Код авторизации

redirect_uri

должен

Адрес обратного вызова для авторизации

client_id

должен

клиент Идентификатор, используемый для идентификации клиента, эквивалентный appId , генерируется при подаче заявки на регистрацию

client_secret

должен

клиентсекретный ключ,Эквивалент appSecret, генерируется при подаче заявки на регистрацию

type

Необязательный

Если type=info, основная информация пользователя доставляется напрямую вместо токена.

В обычных обстоятельствахизтело ответа

имя

Описание информации

access_token

доступжетон

token_type

доступжетонтип,например, предъявитель,mac и т. д.

expires_in

Токен доступа из жизненного цикла,в секундах,Указывает, сколько времени пройдет до истечения срока действия токена после его выпуска.

refresh_token

В настоящее время недоступно, обычные пользователи вернутrefresh_token=null.

scope

Фактический диапазон разрешений пользователя, например [1,2,3,4]. Подробную информацию см. в списке разрешений.

если type=info , тогда ответь

имя

Описание информации

uid

уникальный идентификатор пользователя

nickname

Никнейм пользователя

status

Текущий статус пользователя в системе

avatar

URL аватара пользователя

Пример запроса защищенного ресурса

Например, если вам нужно получить информацию о пользователе, возьмите с собой только что выданный токен доступа.

Язык кода:javascript
копировать
https://api.liyxi.com/node/v0/info

(Зеркальный сервер в материковом Китае, скорее всего, изменится, в основном на основании документации по использованию)

тело ответа

json

Язык кода:javascript
копировать
{
  status: 200,
  msg: «Успешное получение основной информации о пользователе»,
  data: {}
}

данные следующие

имя

тип

Описание информации

uid

String

уникальный идентификатор пользователя

nickname

String

Никнейм пользователя

status

Number

Текущий статус пользователя в системе

avatar

String

URL аватара пользователя

Некоторые дополнения к знаниям, связанным с токенами

На отечественной платформе коротких видео1забавныйизсцена,это примерно token Нет смысла обновлять видео из области комментариев

Жетон изготовлен из header 、payload ,и signature В трех частях используются английские символы. “.” подключенизнить(JWT)。существоватьОбычно,header В хранилище находится этот токен алгоритма подписи такжетип(base64 После кодирования), полезная нагрузка Носитель памяти используется пользователем jwt Передача данных (base64) при генерации токена После кодирования), подпись Сохраненная строка представляет собой зашифрованную строку (подпись) с использованием первых двух и специального секретного ключа строки для предотвращения взлома. для "Много времени token будет взломан» Вот как это сказано,почти невозможно,И это не основная причина генерации токена обновления.

О краже токенов,существоватьВ обычных обстоятельствах,неизбежныйизпричины или личные причины(比如существоватьклиент или ресурсный Вирусное программное обеспечение было установлено кем-то на сервере.、Третья сторона использовала уязвимость)。существовать网络传输изв процессе,TLS Благодаря аутентификации, конфиденциальности, целостности и защите от повторного воспроизведения TLS Основной способ работы заключается в том, что клиент использует асимметричное шифрование для связи с сервером, реализует аутентификацию и согласовывает симметричное шифрование с использованием ключей, а алгоритм симметричного шифрования использует согласованные ключи для сопряжения информации. также Дайджест сообщений для зашифрованной связи,Между разными узлами используются разные симметричные ключи.,Это гарантирует, что информация может быть получена только обеими общающимися сторонами.,Поэтому в большинстве случаев токены не будут перехвачены во время передачи по сети.

О двойном токене из формы,确实可以существоватьв определенной степениПовышение безопасности,Но на практике он больше используется для снижения давления авторизации. Приведите пример,Например, пользователь Чжан Сан2正существовать使用扣扣3счет Играйте в скромных боевых крестьян4,Чжан Сан сыграл несколько пар подряд во время игры.,есликлиентиз Каждый запрос требует авторизации на сервере,Тогда уполномоченное лицо обязательно выдержит большое давление.,если сервер авторизации неисправен,Это повлияет на все сервисы, на которых хранятся защищенные ресурсы. если напрямую выпускает долгосрочные токены,клиент больше не связывается с авторизованным сервером после Авторизации,В настоящее время предполагаемые бизнес-нарушения со стороны Чжан Саня, такие как групповая установка лайков/пакетное добавление друзей/использование сторонних клиентов и другие бизнес-нарушения, были временно заморожены.,Вам необходимо перейти в систему самообслуживания Kuakou или управление средствами.5,Но Чжан Сан играет смиренных и сражающихся крестьян.,Времени разбираться с этим не было. В это время Чжан Сан уже находится в ненормальном состоянии.,Невозможно узнать защищенные ресурсы хранилища. Изсервер не может быть известен.,если токен долгосрочный из,всегда будет предоставлять услуги клиенту,Это очень опасно. Поэтому клиенту необходимо регулярно получать статус владельца ресурса от сервера авторизации.,для дополнительной безопасности,Это настоящая причина появления токенов обновления.,Не совсем для предотвращения кражи.

Ссылки

https://dev.mi.com/console/doc/detail?pId=711

https://account.lolinya.net/docs/

https://datatracker.ietf.org/doc/html/rfc5849

https://datatracker.ietf.org/doc/html/rfc6749

https://datatracker.ietf.org/doc/html/rfc6750

https://datatracker.ietf.org/doc/html/draft-hammer-oauth-v2-mac-token-02

  1. Отечественная платформа коротких видео: я называю платформу только из,Никакой клеветы или подобных мыслей,Не переоценивайте,Просто чтобы сузить диапазон платформ,не имеет другого значения ↩︎
  2. Чжан Сан: Я выбираю имя случайно.,Если есть какое-либо сходство, используйте инструмент отладки разработчика, чтобы изменить его на другое имя.,не имеет другого значения ↩︎
  3. Ко Коу: Я выбираю себе имя по своему желанию.,Не Шэньчжэнь Tencent Computer Co., Ltd. выпустила многоплатформенное программное обеспечение для обмена мгновенными сообщениями 11 февраля 1999 г.,Если есть какое-либо сходство, используйте инструмент отладки разработчика, чтобы изменить его на другое имя.,не имеет другого значения ↩︎
  4. Скромный фермер: название приложения выбираю по своему желанию,Это не игра, принадлежащая Shenzhen Tencent Computer Co., Ltd.,также,Я тоже не сторонник настольных и карточных игр.,Он также не поддерживает азартные игры.,И нет такого руководства,Просто для примера приложения,не имеет другого значения ↩︎
  5. Бизнес-нарушения, связанные с пакетным лайками/пакетным добавлением друзей/использованием сторонних клиентов, а также другие бизнес-нарушения были временно заморожены.,Необходимо перейти в QQ для самостоятельной обработки или управления средствами: я могу придумать причины по своему желанию.,Не имеет ничего общего с каким-либо другим приложением,Просто чтобы проиллюстрировать важность токенов обновления.,Любое сходство чисто случайно,Никаких противозаконных аспектов из руководства,При необходимости,Используйте инструменты отладки разработчика, чтобы изменить его по другим причинам. ↩︎
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода