Как на сайте сделать авторизацию через вконтакте: Регистрация на сайте через ВКонтакте
Сделать вход на сайт через Вконтакте Инструкция – info-effect.ru
На чтение 2 мин. Опубликовано
Привет ! Сегодня я покажу вам как сделать вход или авторизацию на сайт через соцсеть вконтакте. Виджет авторизации вы сможете добавить на свой сайт в любое место. Виджет очень просто создать !
Авторизуйтесь вконтакте, затем перейдите на сайт vk.com/dev для разработчиков. Далее, на главной странице нажмите на вкладку – Виджет авторизации.
Далее, вы сможете подключить и настроить виджет ВК. Вам нужно указать:
– Если вы ещё не создавали приложение, то выберите параметр – Подключить новый сайт.
– Укажите название вашего сайта.
– Укажите URL адрес вашего сайта.
– Основной домен сайта, подставится автоматически.
– Выберите тематику сайта.
– Сохраните настройки.
Далее, вам нужно выбрать вид авторизации. Есть два вида:
– Обычный, пользователь будет переадресован на указанный в параметре authUrl адрес с полями: uid, first_name, last_name, photo, photo_rec, hash.
– Динамический, после авторизации будет вызвана функция onAuth c объектом data, содержащим поля uid, first_name, last_name, photo, photo_rec, session, hash, также пользователь будет авторизован в openApi.
Далее, если вы выбрали обычный вид авторизации, то вы можете указать – Адрес для авторизации. Можно указать ширину виджета.
Далее, скопируйте код виджета. Обратите внимание ! Код разделён на две части. Верхнюю часть необходимо вставить на свой сайт перед закрывающим тегом head (находится в заголовке). Нижняя часть кода будет отображать сам виджет, поэтому вставьте его в то место где будет вход на сайт.
Если ваш сайт построен на WordPress, вам нужно перейти на страницу: Внешний вид – Редактор. Откройте для редактирования файл header.php, перед закрывающим тегом head вставьте верхнюю часть кода ВК. Обновите файл.
Всё готово ! После добавления кода, у вас на сайте будет отображаться виджет Вконтакте для входа на сайт !
Остались вопросы ? Напиши комментарий ! Удачи !
Авторизация через ВКонтакте на PHP
Автор статьи: admin
Метки: PHP / Новичку
В этой статье вы узнаете как делается авторизация через ВКонтакте на языке программирования PHP, вы убедитесь, что это очень просто.
Также посмотрите нашу статью Как сделать регистрацию на PHP через email.
Создание приложения во ВКонтакте:
Перед тем как начать разрабатывать авторизацию через ВК, нужно зарегистрировать наше приложение или сайт, для этого заходим во вконтакт и с левого бока должен быть пункт «разработчикам».
Также можете перейти по этой ссылки.
Там же нажимаем сверху на вкладку мои приложения.
В этой вкладки выбираем приложение и нажимаем редактировать, если нет нужного нам или вообще нет не одного, то нажимаем на кнопку «Создать приложение».
Тут думаю всё понятно, единственное, для некоторых может быть не понятным, что такое базовый домен, тут просто нужно вписать доменное имя своего сайта, нажимаем «Подключить сайт».
После того как создали сайт, заходим в настройки этого сайта и там самое главное, это три пункта, «ID приложения», «Защищённый ключ» и «Доверенный redirect URI», последнее это поле, в него вы должны вписать где будет обрабатыватся авторизация.
Делаем авторизацию через ВК:
Теперь посмотрим как делается сама авторизация через ВК на PHP, для этого, сначала нужно создать кнопку, которая будет отсылать во ВК, но перед этим сделаем файл config.php, в котором будим хранить нужные нам данные.
// Константа для ID приложения define(‘ID’, ‘ID приложения’); // Константа для Защищённый ключа define(‘SECRET’, ‘Защищённый ключ’); // Константа для Доверенный redirect URI define(‘URL’, ‘Доверенный redirect URI’); |
В этом файле просто хранятся константы нужных данных нашего приложения.
Теперь создаём страницу авторизации, вот она.
<?php // Подключаем config require_once ‘config.php’; ?> <a href=»https://oauth.vk.com/authorize?client_id=<?= ID ?>&redirect_uri=<?= URL ?>&display=page»>Войти через ВК</a> |
Тут просто подключаем файл «config.php» и создаём ссылку для входа через ВКонтакте.
Вы можете заметить, что во первых ссылка отсылается не на наш сайт, а на какую то страницу во ВК, и во вторых это три значения в GET, давайте разберём это.
Дела в том, что когда будим нажимать на эту ссылку, мы даже не заметим как попали во Вконтакт, потому что, сразу перекинемся на страницу которая указана в значение redirect_uri
, это нужно для того, что бы получить код для последующей авторизации, и таким образом мы подтверждаем наш сайт.
Потом когда мы перейдём где будем обрабатывать основную авторизацию, у нас будет GET запрос, но об этом позже.
Также есть ещё два значения в запросе, это client_id
в нём передаём ID приложения, а второй это display
, тут указывается тип страницы для авторизации, у нас это page
, которая используется для обычных WEB сайтов.
Примечание:
Если вам не понятна работа с GET запросами и вообще с формой, то посмотрите эту часть нашего учебника по PHP: PHP работа с формой.
Вот как у нас выглядит страница.
Теперь перейдём к обработчику авторизации и получению данных пользователя.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // Подключаем файл config.php require_once «config.php»;
// Проверка, на то, что есть значение code в GET запросе if (!$_GET[«code»]) { // Если нет, то прерываем программу и выводим надпись exit(«Что то пошло не так»); } else { // Иначе // Создаём URL для запрса $url = «https://oauth. vk.com/access_token?client_id=» . ID . «&client_secret=» . SECRET . «&redirect_uri=» . URL . «&code=» . $_GET[«code»]; // Получаем токен с помощью запроса $token = json_decode(file_get_contents($url), true); if (!$token) { // Если токена нет то // Прерываем программу и выводим надпись exit(«Что то пошло не так с токинам»); } else { // Иначе // Создаём URL нового запроса $url = «https://api.vk.com/method/users.get?v=5.21&user_id=» . $token[‘user_id’] . «&c=» . $token[«access_token»] . «&fields=uid,first_name,last_name»; // Делаем запрос и получаем данные $data = json_decode(file_get_contents($url), true); // Выводим данные echo «<pre>»; var_dump($data); echo «</pre>»; } } |
Тут уже всё сложнее, сперва мы проверяем, есть ли вообще код, для последующей работе с авторизацией, если нет, то прерываем программу, если да, то делаем URL запрос.
В этом GET запросе можете заметить несколько значений два из них знакомы, о них можете ознакомится выше, остальные сейчас разберём.
Первый, client_secret
, это наш защищённый ключ, второе значение code
код который у нас есть из GET запроса.
После этого мы отправляем GET запрос с помощью функции file_get_contents()
, в качестве ответа, она вернёт JSON массив, который не читается PHP, поэтому мы объявляем функцию внутри другой функции json_decode()
, которая декодирует формат JSON, в качестве второго параметр она принимает true
, что означает декодирование в обычный ассоциативный массив PHP, это массив присваиваем переменной $token
.
После чего опять проверяем, имеет ли значение переменная $token
, если нет, то останавливаем программу и выводим сообщение, если да то опять делаем URL запрос.
Как можете заметить, значение которые мы отправляем, они все взяты из массива $token
, первое значение user_id
тут отправляем ID пользователя, второй access_token
, это токиен аутентификации, третье значение, fields
, это какие данные пользователя мы хотим получить, в нашем случае, хотим получить id пользователя и его имя, фамилию.
Важно:
Также очень важное значение v
, без него вообще не чего работать не будит, он указывает версию API.
После, точно так же, как и прошлый раз, отправляем этот запрос, получаем массив и выводим его, вот что должно получится.
Теперь авторизация ВКонтакте на PHP готов. Как видите всё работает как надо, теперь вам просто нужно полученные данные отправить в базу данных или например в cookie.
Если не знаете как работать с базой данных, то посмотрите наш учебник про работу с базой данных в PHP.
Вывод:
В этой статье мы разобрали как делается авторизация во ВКонтакте на языке программирования PHP, также, если вам что то не понятно, то посмотрите эти две раздела из документации ВК.
Подписываетесь на соц-сети:
Оценка:
(Пока оценок нет)
Загрузка…
Также рекомендую:
Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте
По рекомендации пользователей сайта начал добавлять авторизацию через социальные сети на сайт. Первой такой социальной сетью стала ВКонтакте, как наиболее популярная социальная сеть у пользователей моего сайта.
Django сам по себе имеет необходимый функционал по работе с протоколом OAuth 2.0, который мог используется в API ВКонтакте для авторизации пользователей на сторонних ресурсах (и не только для авторизации). Но в данном случае я не стал писать свой велосипед, используя голую поддержку OAuth в Django, а нашёл очень хорошую батарейку, которая пожалуй достаточно известна среди разработчиков сайтов на Django, которая позволила внедрить авторизацию через ВКонтакте всего за пару часов.
Эта батарейка называется
Python Social Auth Django
.
Давайте пошагово разберёмся, что нам нужно сделать, чтобы подключить авторизацию через ВКонтакте на сайт с Django
Шаг 1 — Установка Python Social Auth Django
Делается это одной командой в вашем виртуальном окружении через утилиту pip
pip install social-auth-app-django
В документации предлагается при конфигурировании два вариант ORM для работы системы аутентификации через социальные сети. Это классическая ОРМ Django и ОРМ MongoEngine, но так получилось, что требуемый для MongoEngine пакет устарел и немного несовместим с последними версиями Django, просто не работает, даже в документации разработчиков mongoengine висит призыв о помощи с поддержкой утилиты. Поэтому будем настраивать только для классической ОРМ.
Шаг 2 — Регистрация батарейки на вашем сайте
Прописываем приложение аутентификации в INSTALLED_APPS
INSTALLED_APPS = ( ... 'social_django', ... )
Шаг 3 — Миграция базы данных
Вам потребуется применить изменения в структуре базы данных, поскольку данная батарейка имеет свои таблицы для работы с авторизацией пользователей.
./manage.py migrate
Далее последуем ещё одной рекомендации по настройке базы данных, если Вы, как и я, используете PostgreSQL. А именно…
При использовании PostgreSQL рекомендуется использовать встроенное поле JSONB для хранения извлеченных дополнительных_данных. Чтобы включить его, задайте настройку:
SOCIAL_AUTH_POSTGRES_JSONFIELD = True
Шаг 4 — Настройка бекендов аутентификации
Также прописываем в settings.py
AUTHENTICATION_BACKENDS = ( 'social_core.backends.vk.VKOAuth3', # бекенд авторизации через ВКонтакте 'django.contrib.auth.backends.ModelBackend', # бекенд классической аутентификации, чтобы работала авторизация через обычный логин и пароль )
Обязательно включите бекенд классической аутентификации, иначе потеряете возможность зайти через логин и пароль на сайт.
Шаг 5 — Настройка процессора шаблонов
У меня за полтора года разработки данного сайта настройка TEMPLATES осталась практически нетронутой, но я добавил одну строку для этой батарейки
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django. template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'social_django.context_processors.backends', # Добавил эту строку ], }, }, ]
Шаг 6 — Настройка ключей для ВКонтакте
Здесь дана настройка секретных ключей для ВКонтакте
SOCIAL_AUTH_VK_OAUTh3_KEY = 'XXXXXXX' SOCIAL_AUTH_VK_OAUTh3_SECRET = 'XXXXXXXXXXXXXXXXXXXX'
Чтобы их получить, нужно создать в инструментарии разработчика ВКонтакте приложение и взять ID вашего приложения и секретный ключ для него.
Регистрируем приложение
Заходим в его настройки и видим всё, что нужно
В итоге прописываем в данные переменные следующие настройки
SOCIAL_AUTH_VK_OAUTh3_KEY = 'ID приложения' SOCIAL_AUTH_VK_OAUTh3_SECRET = 'Защищённый ключ'
Шаг 7 — Подключение маршрутов для авторизации в urls. py
Делается это так
urlpatterns = [ ... path('', include('social_django.urls')), ]
Шаг 8 — Добавление ссылки на маршрут
А теперь добавим ссылочку на маршрут где-нибудь в шаблоне, чтобы запускать авторизацию через ВКонтакте
<a href="/login/vk-oauth3"><img src="/static/lvk.png" data-toggle="tooltip" title="{% trans 'Login via VKontakte' %}"></a>
Шаг 9 — Настройка редиректа при авторизации
Это необязательная настройка, которая укажет URL для перенаправления пользователя на вашем страницы после успешной авторизации. Оставим корень сайта
LOGIN_REDIRECT_URL = '/'
Там уже разберётесь, как вам лучше будет сделать
Шаг 10 — Запрос разрешений на получение доступа к email
У меня на сайте используется своя система рассылки сообщений уведомлений по почте, поэтому мне важно иметь доступ к email пользователю, чтобы уведомлять его о новых событиях на ресурсе, поэтому добавим запрос на получение доступа к email.
SOCIAL_AUTH_VK_OAUTh3_SCOPE = ['email']
Для Django рекомендую VDS-хостинг
TIMEWEB
Безопасна ли авторизация на сайте через ВКонтакте и другие соцсети?
Буквально вчера добавил полезную для постоянных посетителей блога функцию – возможность зайти в качестве подписчика, воспользовавшись кнопками социальных сетей. Это значительно удобнее, чем внедрять отдельную форму регистрации. Если же сравнивать с анонимным комментированием (пока ещё доступным), то плюс кроется в удобстве отслеживания ответов на свои сообщения другими пользователями, в просмотре истории, смене аватара и т. д.
Первый вопрос, возникающий у не сталкивавшегося с этим человека: «Безопасна ли авторизация на сайте через ВКонтакте?». Согласно мировой статистике, наибольшее опасение за сохранность своих конфиденциальных данных выражают люди в возрасте 35-40+, а молодёжь уже давно привыкла к данному способу идентификации. Чтобы разобраться в нём, необходимо понять, какие сведения передаются.
Итак, мы жмём на кнопку «Войти через VK» (или с помощью любой другой соцсети, коих добавил множество), что происходит далее? На экране отображается подтверждение со стороны соцсети. После этого скрипт при помощи API-протокола спрашивает у социалки, действительно ли пользователь там зарегистрирован.
Ответ положительный? Всё, процедура завершена. Никакой передачи паролей и тому подобного. Присутствует сложное шифрование, исключающее перехват. В этом случае фишинг невозможен, поскольку речь о прямом запросе.
Обращайте внимание на адресную строку в новом окне, где подтверждается доступ к данным. Там должен висеть замок, характерный для HTTPS-сайтов. При нажатии на него отобразится уровень безопасности и видна информация о сервисе. Уж надеюсь, что отличить ВК или ОК от маскирующегося под него веб-сайта вы способны, достаточно взглянуть на адресную строку.
Как работает авторизация через социальные сети? Основной функционал API
Принцип Application Programming Interface заключается в использовании библиотек, предоставляемых третьими лицами. Взаимодействие происходит методом запросов и ответов. Попросили вход на веб-сайт? Увидели интерфейс для подтверждения, затем получили «зелёный свет» на вход. Быстро, просто и безопасно.
Важно отметить, что для получения доступа к API-интерфейсу каждого отдельного сервиса необходимо пройти процедуру создания своего приложения, подписать соглашение разработчика и т. д. Сами порталы со всей ответственностью относятся к возможности идентификации через них, требуя от владельцев сайтов соблюдения требований.
Надеюсь в той краткой статье удалось ответить на вопрос, безопасна ли авторизация на сайте через ВКонтакте. Да, совершенно.
Подписывайтесь на наши каналы в Яндекс.Дзене и на YouTube! Копирование текстов с сайта GameNewsBlog.ru запрещено.
10 плагинов входа через социальные сети для WordPress / WordPress плагины / Постовой
В наши дни быстрая регистрация через социальные сети становится чрезвычайно важной функцией для любого новостного или портального сайта на платформе WordPress. Пользователи предпочитают авторизироваться мгновенно, в один клик, и не затрачивать время на регистрацию через электронную почту. Всю суть данной проблемы могут понять люди, использующие данную платформу для продажи товаров в интернет-магазине.
WordPress по умолчанию не предоставляет возможности входа через социальные сети. Если пользователь желает, чтобы его клиенты заходили таким способом, ему придется приобрести платные разработки или использовать специальный бесплатный плагин. Простота регистрации и вход через социальные сети на любом сайте на wordprees очень важны. Если Вы предложите посетителям проделывать данную процедуру путем заполнения целого ряда полей с помощью электронной почты, то наверняка потеряете массу потенциальных клиентов.
В данной статье подобраны 10 плагинов входа через социальные сети для WordPress, которые позволят Вашему сайту стать удобным и выглядеть профессионально. Для желающих собственными руками создать виджет с социальными кнопками, рекомендуем ознакомиться с материалами по теме конструкторы социальных кнопок для сайта.
Смотрите также:
Плагины для кастомизации страницы входа на WordPress
Social Login
Это бесплатный комплексный WordPress плагин, который предлагает простое решение входа и регистрации на сайте через социальные сети. Для него доступна авторизация через такие ведущие сайты, как Facebook, Twitter, Google, LinkedIn, PayPal, LiveJournal, Instagram, Yahoo, ВК и многие другие. Всего он объединяет более 25 популярных сетей, с помощью которых можно войти, зарегистрироваться или оставить свой комментарий.
Данный плагин полностью совместим с BuddyPress, поэтому можно использовать логин практически из любой социальной группы, что является очень актуальным решением. Виджет входа размещается в боковой панели вашего сайта, или используется шорткод.
Super Socializer
Super Socializer является многоцелевым плагином для WordPress. Он поможет интегрировать социальные сети с вашим полем для комментария и предлагает прекрасные варианты для авторизации на сайте. Пользователь легко сможет зайти на Ваш сайт, используя уже существующий логин в одной из социальных сетей. После проведения такой простой регистрации, информация о его профиле вместе с электронной почтой сохранится в базе данных вашего блога.
Nextend Twitter Connect
Это очень полезный плагин, который позволяет людям зарегистрироваться и мгновенно входить на сайт, используя свой аккаунт в Twitter. Им не придется заполнять длинные формы и тратить время на заполнение анкет. Вся регистрация с помощью Nextend Twitter Connect будет произведена одним щелчком мышки.
Nextend Facebook Connect
Следующий плагин во многом напоминает предыдущий ресурс, но он подходит для авторизации на сайтах через Facebook.
Nextend Google Connect
Данный ресурс имеет такие же функции, как и Nextend Twitter Connect или Nextend Facebook Connect. Он пригодится пользователям, имеющим Google аккаунт.
WordPress Social Login
WordPress Social Login – это полезное приложение, позволяющее производить регистрацию и вход на сайт на базе WordPress, используя свой логин в различных социальных сетях. Вы сможете полностью контролировать доступ пользователей к своему веб-сайту. Данный плагин имеет широкие возможности для индивидуальных настроек.
Social Login for WordPress
Еще один мощный WordPress плагин, способный интегрировать социальные сети с WordPress. Данный сервис платный, и работа с ним осуществляется на основе подписки, но любой пользователь может использовать 30-и дневный бесплатный период для тестирования. Это даст возможность проверить, насколько этот плагин подходит для Ваших целей. Social Login for WordPress великолепно интегрируется со всеми популярными сетями, позволяя оставлять комментарии, а также производить авторизацию на сайте. Он способен захватывать данные профиля пользователя с его разрешения и автоматически создавать профиль в базе данных WP.
WooCommerce Social Login
Данный плагин очень полезен тем пользователям WooCommerce, которые имеют интернет-магазин. WooCommerce Social Login позволяет проверять данные пользователей и осуществлять их вход в систему из социальных аккаунтов в Facebook, Twitter, Google, Yahoo, LinkedIn, Foursquare, Windows Live, ВКонтакте, Instagram. Вы также сможете перенаправлять пользовательские URL после входа в систему через эти социальные сети.
UserPro
С премиум плагином UserPro Вы получите красивый вид входа и авторизацию через социальные сети на своем сайте. Пользователи смогут легко входить на Ваш ресурс, используя регистрацию через ВКонтакте и аккаунты других социальных сетей. Но этот ресурс создан не только для авторизации, он позволяет обмениваться комментариями, ограничивая при желании их содержимое и многие другие функции.
Gigya – Social Infrastructure
Еще один очень простой в использовании WordPress плагин, который поможет интегрировать социальные аккаунты с сайтами на базе WordPress. Плагин имеет красивые иконки соц. сетей, и с ним Вы можете настроить необходимые кнопки, согласно своему желанию.
Плагины входа через социальные сети для WordPress не только дают возможность пользователям заходить на веб-сайт, используя авторизацию через Facebook, Twitter, Google, ВКонтакте, но и делают внешний вид ресурса очень привлекательным. Все модули, упомянутые в этом списке, широко используются, и они действительно эффективны. Вы можете выбрать любой из этих плагинов и начинать работу уже сейчас.
Как сделать регистрацию и авторизацию пользователей на сайте
Вы здесь:
Главная — PHP — PHP Основы — Как сделать регистрацию и авторизацию пользователей на сайте
Не так давно один из моих посетителей попросил меня написать статью о том, как сделать регистрацию и авторизацию пользователей на сайте. Собственно, выполняю его просьбу, и в этой статье я расскажу о том, как это делается.
Существует несколько способов создания регистрации и авторизации пользователей, но в этой статье я разберу свой любимый — через механизм сессий или cookie.
Первым делом, если Вы хотите сделать регистрацию у себя на сайте, то необходимо понимать, где будут храниться данные о пользователях. Можно хранить в обычном текстовом файле, в XML-файле, либо в базе данных. Первые два варианта — очень опасные, поэтому не рекомендую Вам ими пользоваться. А вот третий вариант — хранение информации о пользователях в базе данных — самый популярный, и именно этим способом хранения информации я советую Вам пользоваться.
С местом хранения определились. Теперь перейдём непосредственно к алгоритму авторизации:
- Создать форму регистрации на HTML.
- Получить данные из формы в скрипте-обработчике.
- Проверить полученные данные, и если они некорректны, то сделать редирект обратно на форму регистрации.
- Если данные корректны, то записать их в базу данных.
Вот и весь процесс регистрации пользователя на сайте. То есть регистрация — это сохранение информации о пользователе на сайте.
Дальнейшим пунктом является авторизация пользователя на сайте, однако, прежде чем к нему переходить, расскажу об одном важном моменте в форме регистрации — пароле. Я Вам настоятельно рекомендую не хранить пароли в открытом виде (например так, «123456«). Обязательно их шифруйте, хотя бы с помощью функции md5(). И в базе данных храните именно зашифрованный пароль.
Теперь авторизация. Первое, что Вы должны понять — это то, что информация об авторизации должна где-то храниться. Самый простой вариант — это хранение информации в сессии (или в cookie). А теперь алгоритм:
- Создать форму авторизации пользователя на HTML, куда пользователь должен будет ввести свой логин и пароль.
- В скрипте-обработчике принять данные от пользователя. Если Вы меня послушались, и храните шифрованные пароли в базе данных, то сначала шифруйте полученный пароль. Если же в базе данных лежат открытые пароли, то шифровать не надо.
- Проверить правильность введённых данных, и если логин и пароль совпадают с существующим пользователем в базе данных, то записываете в cookie или сессию информацию с логином и шифрованным паролем (либо открытым паролем, если Вы его не шифровали).
- Если логин и/или пароль введены неверно, то делать редирект обратно на форму авторизации.
Теперь у Вас есть необходимая информация об авторизации пользователя, которая хранится в его cookie или на сервере (если сессия). Фактически, теперь Вам нужно эту информацию проверять на каждой странице сайта и сверять её аналогично проверке формы авторизации. То есть считываете из cookie (сессии) логин и пароль, и проверяете его. Если они верные, то показываете одну страницу (для зарегистрированных пользователей), а если неверные, то показываете другую страницу (для гостей).
И последнее. Как делается кнопка «Выход«? Очень просто. При нажатии на эту кнопку, стираются cookie, либо сессия. Таким образом, пользователь автоматически вылетает с сайта.
Как видите, всё элементарно, но при реализации этого алгоритма у Вас обязательно возникнет множество вопросов. Например, что делать при регистрации пользователя, логин которого уже имеется в базе данных. Реализация различных проверок входных данных, реализация проверки существования e-mail и прочее — всё это является достаточно сложным, если Вы делаете это в первый раз. Однако, самый сок я выдал. Если будут вопросы при реализации, то спрашивайте либо на форуме, либо в комментариях.
В данной статье я привёл лишь алгоритм, а чтобы научиться его реализовывать нужно знать PHP и MySQL, которые максимально подробно разобраны в этом обучающем курсе: http://srs.myrusakov.ru/php
-
Создано 05.05.2011 13:05:46 -
Михаил Русаков
Предыдущая статья Следующая статья
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk. com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
<a href=»https://myrusakov.ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>Она выглядит вот так:
-
Текстовая ссылка:
<a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
[URL=»https://myrusakov. ru»]Как создать свой сайт[/URL]
Авторизация
Введение
API Trello использует аутентификацию на основе токенов для предоставления сторонним приложениям доступа к Trello API. После того, как пользователь Trello предоставил приложению доступ к своей учетной записи и данным Trello, приложению выдается токен, который можно использовать для выполнения запросов к Trello API от имени пользователя.
Есть два способа авторизовать клиента и получить токен пользователя. Первый — через наш маршрут 1 / авторизовать
, второй — через базовый OAuth2.0. Сейчас мы рассмотрим первое. Если вы предпочитаете использовать OAuth, вы можете сразу перейти к разделу «Использование базового OAuth».
Авторизация клиента
Чтобы начать процесс аутентификации, вам понадобится ключ API. Каждому пользователю Trello предоставляется ключ API. Вы можете получить свой ключ API, войдя в Trello и посетив https://trello.com/app-key/.
Поскольку ключ API привязан к пользователю, часто бывает хорошей идеей создать пользователя Trello специально для создания одного приложения или интеграции. Это гарантирует, что сторонняя интеграция не связана с учетной записью Trello стороннего разработчика.
Получив ключ API, вы будете использовать его, чтобы попросить пользователя Trello предоставить доступ к вашему приложению. Для этого вы должны направить пользователя на URL-адрес авторизации и передать необходимые параметры запроса, как описано ниже. Запрос на авторизацию можно открыть разными способами и с рядом различных опций.
Когда вы запускаете процесс авторизации, пользователь увидит следующий экран:
Имя приложения, длина доступа и объем разрешений можно настроить с помощью параметров запроса (задокументировано ниже).
Например, если вы только начинаете работать с API Trello и хотите изучить возможные варианты, вы можете создать токен для себя, используя свой ключ API и следующий URL-адрес:
https://trello.com/1/authorize?expiration=1day&name=MyPersonalToken&scope=read&response_type=token&key={YourAPIKey}
После посещения этой страницы и нажатия зеленой кнопки «Разрешить» вы будете перенаправлены на страницу с вашим токеном. Теперь вы можете использовать этот токен и свой ключ API, чтобы сделать запрос к Trello API.Вы можете попробовать это: https://api.trello.com/1/members/me/?key={yourAPIKey}&token={yourAPIToken}. Это должно вернуть объект, содержащий информацию о вашем пользователе Trello.
Keep Trello Tokens Secret
Tokens for users всегда должны храниться в надежном месте, поскольку они предоставляют доступ ко всей учетной записи пользователя! Это нормально, если ваш ключ API будет общедоступным, но токен никогда не должен быть общедоступным. Если токен становится общедоступным, он должен быть немедленно отозван пользователем.
Если вы авторизуете веб-клиент, вы можете проверить client.js, оболочку для API в javascript. Он включает встроенные методы авторизации, которые могут оказаться полезными. Однако он использует тот же маршрут, который описан ниже.
1 / authorize / Параметры маршрута
Параметр | Допустимые значения | Описание |
---|---|---|
return_url строка | Действительный URL-адрес, на который должен быть возвращен токен. | Если токен передается фрагментом, именно сюда пользователь будет перенаправлен после авторизации. Если токен передается postMessage, он будет использоваться как |
callback_method строка | postMessage или фрагмент | Определяет способ возврата токена. Как правило, postMessage используется, если авторизация выполняется во всплывающем окне, и фрагмент , если это выполняется путем перенаправления.Подробнее о том, как их использовать, см. Client.js. |
область строка | Разделенный запятыми список из одного или нескольких из чтения , записи , учетной записи . | Чтение : чтение досок, организаций и т. Д. От имени пользователя Запись : написание досок, организаций и т. Д. От имени пользователя Учетная запись : чтение электронной почты участника, написание участника информация и уведомления о маркировке читаются |
истечение срока строка | 1 час , 1 день , 30 дней , никогда | Когда истекает срок действия токена. |
имя строка | Имя приложения. | Отображается в процессе авторизации |
ключ строка | Действительный ключ API Trello. | Используется для создания токена пользователя. |
response_type string | token или фрагмент | response_type из token вернет полный токен пользователя. |
Доступ к электронной почте пользователей
Электронная почта
участников может быть доступна только при запросе области учетной записи . однажды
предоставлено, сгенерированный токен можно использовать только для доступа к адресу электронной почты
пользователь, предоставивший доступ.
Пакетный доступ к электронной почте доступен предприятиям только через SCIM API.
Обработка отказа пользователя
В зависимости от используемого вами response_type Trello будет делать одно из двух, когда пользователь нажимает «Запретить» в приглашении потока авторизации.
response_type | Trello's Response |
---|---|
фрагмент | Trello теперь добавит пустой токен = параметр запроса и параметр error = с сообщением об ошибке во фрагмент при перенаправлении обратно на указанный return_url . |
postMessage | Trello будет postMessage ключ error в postMessage со значением сообщения об ошибке. Он будет отправлен на указанный return_url . |
Отмена токенов
Пользователи Trello могут просматривать метаданные о приложениях, которые они авторизовали и предоставили токен, посетив страницу настроек своей учетной записи: https://trello.com/{username}/account. Там, под заголовком Applications , они увидят список всех приложений, к которым они предоставили доступ, объем доступа, дату утверждения доступа и дату истечения срока действия токена.
Пользователи могут отозвать токен, нажав кнопку Отозвать рядом с листингом. Отзыв токена удаляет токену доступ к учетной записи пользователя, и его больше нельзя использовать для выполнения запросов к API Trello от имени пользователя.
Токенов также можно удалить через API. Существует ресурс / 1 / tokens, который включает действие DELETE.
Приложения и Power-Ups должны корректно обрабатывать аннулирование токенов. Если токен был отозван, API ответит HTTP-статусом 401 и сообщением: недопустимый токен
. В этот момент при включении питания или интеграции следует попросить пользователя повторно авторизовать приложение.
Разрешенные источники
Когда ваше приложение аутентифицирует пользователя, вы можете предоставить return_url
, на который Trello будет перенаправлять после того, как пользователь даст согласие на ваше приложение. По умолчанию ключ приложения может перенаправлять на любой домен, но мы настоятельно рекомендуем вам указать источники, на которые ваше приложение будет перенаправлять при завершении авторизации.
Например, если бы мы GitHub создавали интеграцию GitHub для Trello, и мы знаем, что перенаправим обратно только на https: // github.com
после того, как пользователь предоставит доступ в потоке аутентификации, или, возможно, также http: // localhost: 3000
для локальной разработки, мы могли бы добавить оба из них в качестве разрешенных источников для нашего приложения, и никто не сможет использовать наши Ключ API для аутентификации пользователей и передачи токена по любым другим URL, например https://bad. example.com
.
Вы можете просматривать и редактировать разрешенные источники вашего приложения по адресу: https://trello.com/app-key.
Примечание: Если для вашего ключа API не задано разрешенное происхождение, URL-адрес перенаправления работать не будет.По умолчанию все ключи API будут иметь
Как использовать WooCommerce API, не зная, как кодировать
Узнайте, как начать использовать WooCommerce API.
Используйте WooCommerce API для добавления, обновления и удаления заказов, продуктов, клиентов в своем интернет-магазине.
Позже в учебнике я включу множество примеров запросов GET и PUT, которые вы можете скопировать или изменить самостоятельно для собственного использования.
Начнем!
Дополнительные ресурсы
Шаг 1. Включите доступ API в WooCommerce
Чтобы включить WooCommerce API, войдите в бэкэнд своего сайта WordPress, наведите указатель мыши на WooCommerce> Настройки> Дополнительно.
Затем переключите вкладку «Устаревший API»> включить> Сохранить изменения.
Шаг 2. Добавьте ключи API с доступом Чтение / Запись
Затем щелкните вкладку «REST API»> добавьте ключ со своими данными.
Для этого руководства я рекомендую предоставить доступ на чтение / запись для тестовых запросов GET и PUT.
По завершении нажмите кнопку «Создать ключ API», чтобы просмотреть свои consumer_key и consumer_secret .
После создания ключей API храните эти ключи в надежном месте, так как мы будем использовать их для подключения к Insomnia, нашему клиенту API.
Шаг 3. Загрузите Insomnia или другой клиент API
Пришло время использовать наши ключи API для подключения к нашему сайту WooCommerce с помощью клиента API.
Загрузите Insomnia (не партнерская ссылка), клиент API, который мы будем использовать для тестирования запросов GET и PUT. Вы также можете скачать Postman.
Шаг 4. Используйте ключи API для подключения к Insomnia
После загрузки Insomnia откройте приложение и нажмите «Новый запрос».
В раскрывающемся списке вкладки «Базовая» нажмите «Обычная аутентификация» и введите следующие учетные данные:
Затем введите свой consumer_key и consumer_secret для ключей API, которые вы сгенерировали на панели инструментов WooCommerce.
- username = consumer_key
- пароль = consumer_secret
Шаг 5. Сделайте свой первый запрос GET
Для начала я всегда делаю GET-запрос, чтобы получить все заказы, просто чтобы убедиться, что мои ключи API работают правильно.
В запросе GET введите запрос GET для просмотра всех заказов:
https://yourdomain.com/wp-json/wc/v3/orders
Вы должны увидеть все заказы в вашем магазине.
Вы получаете сообщение об ошибке 401 «Извините, вам не разрешено редактировать этот ресурс»? Ознакомьтесь с этой публикацией: Как исправить распространенные проблемы WooCommerce REST API.
Шаг 6. Сделайте свой первый запрос PUT
Подобно запросу GET, я всегда выполняю PUT для обновления одного заказа, чтобы убедиться, что мои ключи API работают правильно, и у меня есть права доступа Read и Write .
Чтобы обновить заказ, введите запрос GET для просмотра одного заказа:
https://yourdomain.com / wp-json / wc / v3 / orders / {insert order ID}
В моем примере запрос GET был следующим URL:
https://yourdomain.com/wp-json/wc/v3/orders/39645/
Затем щелкните раскрывающийся список «ПОЛУЧИТЬ» и выберите параметр «ПОЛУЧИТЬ».
Затем перейдите в раскрывающийся список и выберите «JSON».
Используйте этот пример для обновления статуса заказа с «обрабатывается» на «завершено»
{
"статус": "завершено"
}
Полезные советы
- Код consumer_key должен начинаться с «ck_»
- consumer_secret должен начинаться с «cs_».
- При необходимости вы всегда можете заново сгенерировать свои ключи API.
Примеры запросов GET для WooCommerce
Если у вас есть какой-либо из этих примеров, не забудьте прокрутить до того, как выполнять запросы GET.
GET запрос на просмотр всех заказов
https://yourcompany.com/wp-json/wc/v3/orders/
GET запрос на просмотр одного заказа
https://yourcompany.com/wp-json/wc/v3/orders/ {вставьте идентификатор заказа}
Например, идентификатор заказа - 82513, поэтому для получения этого заказа я бы использовал следующий URL-путь:
https://yourcompany. com/wp-json/wc/v3/orders/82513/
Совет для профессионалов: Найдите идентификатор заказа, нажав на заказ и посмотрев номер после «post =».См. Снимок экрана ниже для справки.
GET запрос на просмотр всех товаров
https://yourcompany.com/wp-json/wc/v3/products/
GET запрос на просмотр одного продукта
https://yourcompany.com/wp-json/wc/v3/products/ {вставьте идентификатор продукта}
Запрос GET для просмотра одного варианта продукта
https://yourcompany.com/wp-json/wc/v3/products/ {вставьте идентификатор продукта} / вариации / {вставьте идентификатор варианта}
GET запрос на просмотр всех клиентов
https: // yourcompany.com / WP-JSON / туалет / v3 / клиенты /
GET запрос для просмотра одного клиента
https://yourcompany. com/wp-json/wc/v3/customers/ {вставьте идентификатор клиента}
Примеры запросов PUT для WooCommerce
PUT запрос на обновление цены простого товара
Чтобы обновить «regular_price», вот пример запроса PUT:
https://yourcompany.com/wp-json/wc/v3/products/ {вставьте идентификатор продукта}
Щелкните «Body»> «JSON» и введите следующий запрос:
{
"regular_price": "81"
}
PUT запрос на обновление цены и количества на складе
Чтобы обновить «regular_price» и «stock_quantity», вот пример запроса PUT:
{
"regular_price": "81",
«Stock_quantity»: 45
}
PUT запрос на обновление метаданных продукта
Для обновления метаданных продукта приведен пример запроса PUT:
{
"мета_данные": [
{
"ключ": "_net_price",
"значение": "40"
}
]
}
Передайте «ключ» в качестве имени поля базы данных и значение в качестве значения.
PUT запрос на обновление цены варианта продукта
пример URL: https://yourdomain.com/wp-json/wc/v3/products/833/variations/854
Чтобы обновить «цену» или «обычную_цену» продукта или варианта продукта, вот пример запроса PUT:
Щелкните «Body»> «JSON» и введите этот запрос
{
"regular_price": "81"
}
Передайте «ключ» в качестве имени поля базы данных и «значение» в качестве значения.
PUT запрос на обновление имени клиента
пример URL: https: // yourdomain.com / WP-JSON / туалет / v3 / клиенты / 3144/
- Замени https://yourdomain.com на свой домен
- Замените 3144 конкретным идентификатором покупателя в вашем магазине.
- Найдите идентификатор клиента, нажав «изменить» для конкретного клиента в WooCommerce и выполнив поиск значения после user_id = XXXX. В приведенном ниже примере идентификатор клиента - 3144
.
Чтобы обновить «first_name» и «last_name», вот пример запроса PUT:
Щелкните «Body»> «JSON» и введите этот запрос
{
"first_name": "Джон",
"last_name": "Лань"
}
PUT запрос на обновление адреса доставки клиента
Вот пример запроса PUT, чтобы обновить адрес доставки клиента:
Щелкните «Body»> «JSON» и введите этот запрос
{
"Перевозка": {
"first_name": "Джон",
"last_name": "Лань",
«компания»: «Сторм Крик»,
"address_1": "Демо-накопитель 110",
"address_2": "Люкс 110",
"город": "Миннеаполис",
"состояние": "MN",
"почтовый индекс": "94203",
"страна": "США"
}
}
Полезные советы и дополнительные ресурсы
Если у вас есть вопросы или вы ищете другие примеры, дайте мне знать в комментариях.
Я сделаю все возможное, чтобы своевременно помочь, а также добавлю в этот пост дополнительные примеры для будущих читателей.
Django Tutorial Part 8: User authentication and permissions - Learn web development
В этом руководстве мы покажем вам, как разрешить пользователям входить на ваш сайт с их собственными учетными записями и как контролировать, что они могут делать и видеть, в зависимости от того, вошли ли они в систему, и их прав . В рамках этой демонстрации мы расширим веб-сайт LocalLibrary, добавив страницы входа и выхода, а также страницы для пользователей и сотрудников для просмотра книг, которые были заимствованы.
Обзор
Django предоставляет систему аутентификации и авторизации («разрешений»), построенную на основе структуры сеанса, описанной в предыдущем руководстве, которая позволяет вам проверять учетные данные пользователя и определять, какие действия разрешено выполнять каждому пользователю. Платформа включает встроенные модели для пользователей
и групп
(общий способ применения разрешений более чем для одного пользователя одновременно), разрешения / флаги, которые указывают, может ли пользователь выполнять задачу, формы и представления для ведения журнала в пользователях и просмотрите инструменты для ограничения содержимого.
Примечание : Согласно Django, система аутентификации должна быть очень общей и поэтому не предоставляет некоторых функций, предоставляемых в других системах веб-аутентификации. Решения некоторых распространенных проблем доступны в виде пакетов сторонних производителей. Например, регулирование попыток входа в систему и аутентификация от третьих лиц (например, OAuth).
В этом руководстве мы покажем вам, как включить аутентификацию пользователей на веб-сайте LocalLibrary, создать свои собственные страницы входа и выхода, добавить разрешения для ваших моделей и управлять доступом к страницам.Мы будем использовать аутентификацию / разрешения для отображения списков книг, которые были заимствованы как для пользователей, так и для библиотекарей.
Система аутентификации очень гибкая, и вы можете создавать свои URL-адреса, формы, представления и шаблоны с нуля, если хотите, просто вызывая предоставленный API для входа пользователя. Однако в этой статье мы собираемся использовать стандартные представления и формы аутентификации Django для наших страниц входа и выхода. Нам все еще нужно будет создать несколько шаблонов, но это довольно просто.
Мы также покажем вам, как создавать разрешения и проверять статус входа и разрешения в представлениях и шаблонах.
Включение аутентификации
Аутентификация была включена автоматически при создании скелета веб-сайта (в учебнике 2), поэтому на этом этапе вам больше ничего делать не нужно.
Примечание : Все необходимые настройки были выполнены за нас, когда мы создали приложение с помощью команды django-admin startproject
.Таблицы базы данных для пользователей и разрешений модели были созданы при первом вызове python manage.py migrate
.
Конфигурация устанавливается в разделах INSTALLED_APPS
и MIDDLEWARE
файла проекта ( locallibrary / locallibrary / settings.py ), как показано ниже:
INSTALLED_APPS = [ ... 'django.contrib.auth', # Фреймворк аутентификации ядра и его модели по умолчанию. 'django.contrib.contenttypes ', # Система типов контента Django (позволяет связывать разрешения с моделями). .... ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ = [ ... 'django.contrib.sessions.middleware.SessionMiddleware', # Управляет сеансами по запросам ... 'django.contrib.auth.middleware.AuthenticationMiddleware', # Связывает пользователей с запросами с помощью сеансов. ....
Создание пользователей и групп
Вы уже создали своего первого пользователя, когда мы рассматривали сайт администратора Django в учебнике 4 (это был суперпользователь, созданный с помощью команды python manage.py создаетuperuser)
. Наш суперпользователь уже аутентифицирован и имеет все разрешения, поэтому нам нужно создать тестового пользователя, который будет представлять обычного пользователя сайта. Мы будем использовать админку для создания групп locallibrary, и логинов на веб-сайтах, поскольку это один из самых быстрых способов сделать это.
Примечание. Вы также можете создавать пользователей программно, как показано ниже. Вам придется сделать это, например, при разработке интерфейса, позволяющего пользователям создавать свои собственные логины (вы не должны предоставлять пользователям доступ к сайту администратора).
от пользователя django.contrib.auth.models import # Создать пользователя и сохранить в базе user = User.objects.create_user ('myusername', '[email protected]', 'mypassword') # Обновить поля, а затем снова сохранить user.first_name = 'Джон' user.last_name = 'Гражданин' user.save ()
Ниже мы сначала создадим группу, а затем пользователя. Несмотря на то, что у нас пока нет разрешений для добавления для членов нашей библиотеки, если нам это понадобится позже, будет намного проще добавить их один раз в группу, чем индивидуально для каждого члена.
Запустите сервер разработки и перейдите на сайт администратора в локальном веб-браузере (http://127.0.0.1:8000/admin/). Войдите на сайт, используя учетные данные своей учетной записи суперпользователя. На верхнем уровне сайта администратора отображаются все ваши модели, отсортированные по «приложению Django». В разделе Аутентификация и авторизация вы можете щелкнуть ссылки Пользователи или Группы , чтобы просмотреть свои существующие записи.
Сначала давайте создадим новую группу для членов нашей библиотеки.
- Нажмите кнопку Добавить (рядом с группой), чтобы создать новую группу ; введите Имя «Члены библиотеки» для группы.
- Нам не нужны разрешения для группы, поэтому просто нажмите SAVE (вы попадете в список групп).
Теперь создадим пользователя:
- Вернуться на главную страницу админки
- Нажмите кнопку Добавить рядом с полем Пользователи , чтобы открыть диалоговое окно Добавить пользователя .
- Введите соответствующее имя пользователя и пароль / Подтверждение пароля для тестового пользователя
- Нажмите СОХРАНИТЬ , чтобы создать пользователя.
Сайт администратора создаст нового пользователя и сразу же перенесет вас на экран Изменить пользователя , где вы можете изменить свое имя пользователя и добавить информацию для дополнительных полей модели User. Эти поля включают имя, фамилию, адрес электронной почты, а также статус и разрешения пользователя (должен быть установлен только флаг Active ).Далее вы можете указать группы и разрешения пользователя, а также увидеть важные даты, связанные с пользователем (например, дату их присоединения и дату последнего входа в систему).
- В разделе Группы выберите группу Элемент библиотеки из списка Доступные группы , а затем нажмите стрелку вправо между полями, чтобы переместить ее в поле Выбранные группы .
- Здесь больше ничего делать не нужно, поэтому просто снова выберите SAVE , чтобы перейти к списку пользователей.
Вот и все! Теперь у вас есть учетная запись «обычного члена библиотеки», которую вы сможете использовать для тестирования (после того, как мы внедрили страницы, позволяющие им входить в систему).
Примечание : Вам следует попробовать создать другого пользователя-члена библиотеки. Кроме того, создайте группу для библиотекарей и добавьте в нее пользователя!
Настройка представлений аутентификации
Django предоставляет почти все необходимое для создания страниц аутентификации для обработки входа в систему, выхода из системы и управления паролями "из коробки".Это включает в себя преобразователь URL-адресов, представления и формы, но не включает шаблоны - мы должны создать свои собственные!
В этом разделе мы покажем, как интегрировать систему по умолчанию в веб-сайт LocalLibrary и создать шаблоны. Мы поместим их в URL-адреса основных проектов.
Примечание : вам не обязательно использовать какой-либо из этого кода, но вполне вероятно, что вы захотите, потому что это значительно упрощает работу. Вам почти наверняка потребуется изменить код обработки формы, если вы измените свою модель пользователя (расширенная тема!), Но даже в этом случае вы все равно сможете использовать функции стандартного представления.
Примечание: В этом случае мы могли бы разумно поместить страницы аутентификации, включая URL-адреса и шаблоны, в наше приложение каталога. Однако, если бы у нас было несколько приложений, было бы лучше разделить это общее поведение входа в систему и сделать его доступным для всего сайта, так что это то, что мы показали здесь!
URL-адреса проектов
Добавьте в конец файла проекта urls.py ( locallibrary / locallibrary / urls.py ) файл:
# Добавить URL-адреса аутентификации сайта Django (для входа, выхода, управления паролями) urlpatterns + = [ путь ('accounts /', include ('django.contrib.auth.urls ')), ]
Перейдите по URL-адресу http://127.0.0.1:8000/accounts/ (обратите внимание на косую черту в конце!), И Django покажет ошибку, что ему не удалось найти этот URL-адрес, и перечислит все URL-адреса, которые он пробовал. Отсюда вы можете увидеть URL-адреса, которые будут работать, например:
Примечание. При использовании вышеуказанного метода добавляются следующие URL-адреса с именами в квадратных скобках, которые можно использовать для обратного сопоставления URL-адресов. Вам не нужно ничего реализовывать - указанное выше сопоставление URL-адресов автоматически сопоставляет указанные ниже URL-адреса.
аккаунтов / логин / [name = 'login'] аккаунты / logout / [name = 'logout'] учетные записи / password_change / [name = 'password_change'] account / password_change / done / [name = 'password_change_done'] учетные записи / password_reset / [name = 'password_reset'] учетные записи / password_reset / done / [name = 'password_reset_done'] учетные записи / reset // / [name = 'password_reset_confirm'] учетные записи / сброс / сделано / [name = 'password_reset_complete']
Теперь попробуйте перейти по URL-адресу для входа (http: // 127.0.0.1: 8000 / accounts / login /). Это снова не удастся, но с ошибкой, которая сообщает вам, что нам не хватает необходимого шаблона ( registration / login.html ) в пути поиска шаблона. Вы увидите следующие строки, перечисленные в желтом разделе вверху:
Тип исключения: TemplateDoesNotExist Значение исключения: registration / login.html
Следующим шагом является создание каталога регистрации на пути поиска и добавление файла login.html .
Каталог шаблонов
URL-адреса (и, неявно, представления), которые мы только что добавили, ожидают найти связанные с ними шаблоны в каталоге / registration / где-нибудь в пути поиска шаблонов.
Для этого сайта мы поместим наши HTML-страницы в каталог templates / registration / . Этот каталог должен находиться в корневом каталоге вашего проекта, то есть в том же каталоге, что и папки каталога и locallibrary ). Пожалуйста, создайте эти папки сейчас.
Примечание: Ваша структура папок теперь должна выглядеть следующим образом:
locallibrary (папка проекта Django)
| _catalog
| _locallibrary
| _templates (новые)
| _registration
Чтобы сделать эти каталоги видимыми для загрузчика шаблонов (т.е. поместить этот каталог в путь поиска шаблонов), откройте настройки проекта ( /locallibrary/locallibrary/settings.py ) и обновите 'DIRS' раздела
, как показано. TEMPLATES
ШАБЛОНОВ = [ { ... 'DIRS': [os.path.join (BASE_DIR, 'templates')], APP_DIRS: Верно, ...
Шаблон входа
Важно : шаблоны аутентификации, представленные в этой статье, представляют собой очень простую / слегка измененную версию демонстрационных шаблонов входа в Django. Возможно, вам придется настроить их для собственного использования!
Создайте новый HTML-файл с именем / locallibrary / templates / registration / login.html и дайте ему следующее содержание:
{% extends "base_generic.html"%} {% блокировать содержание%} {% if form.errors%}{# Предполагается, что вы настроили представление password_reset в своем URLconf #} {% endblock%}Ваше имя пользователя и пароль не совпадают. Пожалуйста, попробуйте еще раз.
{% endif%} {% если следующий%} {% если user.is_authenticated%}У вашей учетной записи нет доступа к этой странице. Продолжать, пожалуйста, войдите с учетной записью, у которой есть доступ.
{% else%}Пожалуйста, войдите, чтобы увидеть эту страницу.
{% endif%} {% endif%}
Этот шаблон имеет некоторые сходства с теми, которые мы видели раньше - он расширяет наш базовый шаблон и переопределяет блок содержимого
.Остальной код представляет собой довольно стандартный код обработки формы, который мы обсудим в следующем руководстве. Все, что вам сейчас нужно знать, это то, что это отобразит форму, в которой вы можете ввести свое имя пользователя и пароль, и что если вы введете недопустимые значения, вам будет предложено ввести правильные значения при обновлении страницы.
Вернитесь на страницу входа (http://127.0.0.1:8000/accounts/login/), как только вы сохранили свой шаблон, и вы должны увидеть что-то вроде этого:
Если вы войдете в систему с действительными учетными данными, вы будете перенаправлены на другую страницу (по умолчанию это будет http: // 127.0.0.1: 8000 / accounts / profile /). Проблема в том, что по умолчанию Django ожидает, что при входе в систему вы захотите попасть на страницу профиля, что может быть, а может и нет. Поскольку вы еще не определили эту страницу, вы получите еще одну ошибку!
Откройте настройки проекта ( /locallibrary/locallibrary/settings.py ) и добавьте текст ниже внизу. Теперь при входе в систему вы по умолчанию должны быть перенаправлены на домашнюю страницу сайта.
# Перенаправить на домашний URL после входа в систему (по умолчанию перенаправляет на / accounts / profile /) LOGIN_REDIRECT_URL = '/'
Шаблон выхода
Если вы перейдете к URL-адресу выхода (http: // 127.0.0.1: 8000 / accounts / logout /), то вы увидите странное поведение - ваш пользователь наверняка выйдет из системы, но вы попадете на страницу выхода Admin . Это не то, что вам нужно, хотя бы потому, что ссылка для входа на этой странице приведет вас к экрану входа в систему администратора (и он доступен только пользователям, имеющим разрешение is_staff
).
Создайте и откройте / locallibrary / templates / registration / logged_out.html . Скопируйте в текст ниже:
{% extends "base_generic.html "%} {% блокировать содержание%}Вышел из системы!
Нажмите здесь, чтобы снова войти в систему. {% endblock%}
Этот шаблон очень простой. Он просто отображает сообщение, информирующее вас о том, что вы вышли из системы, и предоставляет ссылку, которую вы можете нажать, чтобы вернуться на экран входа в систему. Если вы снова перейдете по URL-адресу выхода, вы должны увидеть эту страницу:
Шаблоны сброса пароля
Система сброса пароля по умолчанию использует электронную почту для отправки пользователю ссылки для сброса.Вам необходимо создать формы, чтобы получить адрес электронной почты пользователя, отправить электронное письмо, позволить им ввести новый пароль и отметить, когда весь процесс будет завершен.
Следующие шаблоны можно использовать в качестве отправной точки.
Форма для сброса пароля
Это форма, используемая для получения адреса электронной почты пользователя (для отправки электронного письма для сброса пароля). Создайте /locallibrary/templates/registration/password_reset_form.html и присвойте ему следующее содержимое:
{% extends "base_generic.html "%} {% блокировать содержание%}{% endblock%}
Сброс пароля выполнен
Эта форма отображается после получения вашего адреса электронной почты. Создайте /locallibrary/templates/registration/password_reset_done.html и присвойте ему следующее содержимое:
{% extends "base_generic.html "%} {% блокировать содержание%}Мы отправили вам по электронной почте инструкции по установке пароля. Если они не пришли через несколько минут, проверьте папку со спамом.
{% endblock%}
Электронная почта для сброса пароля
Этот шаблон содержит текст электронного письма в формате HTML, содержащего ссылку для сброса, которую мы отправим пользователям. Создайте /locallibrary/templates/registration/password_reset_email.html и присвойте ему следующее содержимое:
Кто-то попросил сбросить пароль для электронной почты {{email}}.Перейдите по ссылке ниже: {{протокол}}: // {{домен}} {% url 'password_reset_confirm' uidb64 = uid token = token%}
Подтверждение сброса пароля
На этой странице вы вводите новый пароль после нажатия ссылки в электронном письме для сброса пароля. Создайте /locallibrary/templates/registration/password_reset_confirm.html и присвойте ему следующее содержимое:
{% extends "base_generic.html"%} {% блокировать содержание%} {% if validlink%}{% else%}Пожалуйста, введите (и подтвердите) ваш новый пароль.
Не удалось сбросить пароль
Ссылка для сброса пароля недействительна, возможно, потому, что она уже использовалась. Запросите новый сброс пароля.
{% endif%} {% endblock%}Сброс пароля завершен
Это последний шаблон сброса пароля, который отображается, чтобы уведомить вас об успешном сбросе пароля.Создайте /locallibrary/templates/registration/password_reset_complete.html и присвойте ему следующее содержимое:
{% extends "base_generic.html"%} {% блокировать содержание%}Пароль изменен!
{% endblock%}
Тестирование новых страниц аутентификации
Теперь, когда вы добавили конфигурацию URL и создали все эти шаблоны, страницы аутентификации должны теперь просто работать!
Вы можете протестировать новые страницы аутентификации, попытавшись войти в свою учетную запись суперпользователя, а затем выйти из нее, используя следующие URL-адреса:
Вы сможете протестировать функцию сброса пароля по ссылке на странице входа. Имейте в виду, что Django будет отправлять письма сброса только тем адресам (пользователям), которые уже хранятся в его базе данных!
Примечание : система сброса пароля требует, чтобы ваш веб-сайт поддерживал электронную почту, что выходит за рамки этой статьи, поэтому эта часть еще не будет работать . Чтобы разрешить тестирование, поместите следующую строку в конец файла settings.py. Это регистрирует все электронные письма, отправленные на консоль (так что вы можете скопировать ссылку для сброса пароля с консоли).
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend '
Дополнительные сведения см. В разделе Отправка электронной почты (документы Django).
Тестирование аутентифицированных пользователей
В этом разделе рассматривается, что мы можем сделать для выборочного управления контентом, который видит пользователь, в зависимости от того, вошли они в систему или нет.
Тестирование в шаблонах
Вы можете получить информацию о текущем авторизованном пользователе в шаблонах с помощью переменной шаблона {{user}}
(она добавляется в контекст шаблона по умолчанию, когда вы настраиваете проект, как мы это делали в нашем скелете).
Обычно вы сначала проверяете переменную шаблона {{user.is_authenticated}}
, чтобы определить, имеет ли пользователь право просматривать определенный контент. Чтобы продемонстрировать это, теперь мы обновим нашу боковую панель, чтобы отобразить ссылку «Войти», если пользователь вышел из системы, и ссылку «Выход», если он вошел в систему.
Откройте базовый шаблон ( /locallibrary/catalog/templates/base_generic.html ) и скопируйте следующий текст в блок боковой панели непосредственно перед тегом шаблона
endblock
.
-
...
{% if user.is_authenticated%}
- Пользователь: {{user.get_username}}
- Выйти {% else%}
- Войти {% endif%}
Как видите, мы используем if
- , иначе
- endif
теги шаблона для условного отображения текста в зависимости от того, используется ли {{user.is_authenticated}}
верно. Если пользователь аутентифицирован, мы знаем, что у нас есть действующий пользователь, поэтому мы вызываем {{user.get_username}}
, чтобы отобразить его имя.
Мы создаем URL-адреса ссылок для входа и выхода, используя тег шаблона url
и имена соответствующих конфигураций URL. Также обратите внимание, как мы добавили ? Next = {{request.path}}
в конец URL-адресов. При этом в конец связанного URL-адреса добавляется параметр URL, содержащий адрес (URL) текущей страницы .После того, как пользователь успешно выполнил вход / выход, представления будут использовать это значение « следующий
» для перенаправления пользователя обратно на страницу, где они впервые щелкнули ссылку входа / выхода.
Примечание : Попробуйте! Если вы находитесь на домашней странице и нажимаете «Вход / выход» на боковой панели, то после завершения операции вы должны вернуться на ту же страницу.
Тестирование в просмотрах
Если вы используете представления на основе функций, самый простой способ ограничить доступ к функциям - применить декоратор login_required
к вашей функции представления, как показано ниже.Если пользователь вошел в систему, ваш код просмотра будет выполняться как обычно. Если пользователь не вошел в систему, выполняется перенаправление на URL-адрес входа, определенный в настройках проекта ( settings.LOGIN_URL
), передавая текущий абсолютный путь в качестве параметра URL-адреса next
. Если пользователю удастся войти в систему, он вернется на эту страницу, но на этот раз аутентифицирован.
из django.contrib.auth.decorators import login_required @login_required def my_view (запрос): ...
Примечание: Вы можете сделать то же самое вручную, протестировав request.user.is_authenticated
, но декоратор намного удобнее!
Аналогичным образом, самый простой способ ограничить доступ для зарегистрированных пользователей в представлениях на основе классов - это унаследовать от LoginRequiredMixin
. Вам нужно сначала объявить этот миксин в списке суперклассов, перед основным классом представления.
из django.contrib.auth.mixins импорт LoginRequiredMixin класс MyView (LoginRequiredMixin, View): ...
Он имеет точно такое же поведение перенаправления, что и декоратор login_required
. Вы также можете указать альтернативное расположение для перенаправления пользователя, если он не прошел аутентификацию ( login_url
), и имя параметра URL вместо « next
», чтобы вставить текущий абсолютный путь ( redirect_field_name
).
класс MyView (LoginRequiredMixin, View): login_url = '/ логин /' redirect_field_name = 'redirect_to'
Дополнительные сведения см. В документации по Django здесь.
Пример - список книг текущего пользователя
Теперь, когда мы знаем, как ограничить страницу определенным пользователем, давайте создадим представление книг, которые заимствовал текущий пользователь.
К сожалению, у нас пока нет возможности брать книги напрокат! Поэтому, прежде чем мы сможем создать список книг, мы сначала расширим модель BookInstance
для поддержки концепции заимствования и воспользуемся приложением Django Admin, чтобы одолжить несколько книг нашему тестирующему пользователю.
Модели
Во-первых, мы собираемся предоставить пользователям возможность иметь BookInstance
в аренду (у нас уже есть статус
и due_back
date, но у нас пока нет никакой связи между этой моделью. и Пользователь.Мы создадим его, используя поле ForeignKey
(один ко многим). Нам также нужен простой механизм проверки того, просрочена ли кредитная книга.
Откройте каталог / models.py и импортируйте модель User
из django.contrib.auth.models
(добавьте это чуть ниже предыдущей строки импорта вверху файла, чтобы User
был доступен для последующий код, который его использует):
от пользователя django.contrib.auth.models import
Затем добавьте поле заемщика
в модель BookInstance
:
заемщиков = моделей.ForeignKey (Пользователь, on_delete = models.SET_NULL, null = True, blank = True)
Пока мы здесь, давайте добавим свойство, которое мы можем вызывать из наших шаблонов, чтобы определить, просрочен ли конкретный экземпляр книги. Хотя мы можем вычислить это в самом шаблоне, использование свойства, показанного ниже, будет намного более эффективным.
Добавьте это где-нибудь в верхней части файла:
от даты импорта даты и времени
Теперь добавьте следующее определение свойства в класс BookInstance
:
@property def is_overdue (сам): если сам.due_back и date.today ()> self.due_back: вернуть True return False
Примечание : мы сначала проверяем, является ли due_back
пустым, прежде чем проводить сравнение. Пустое поле due_back
приведет к тому, что Django выдаст ошибку вместо отображения страницы: пустые значения не сопоставимы. Это не то, что мы хотели бы, чтобы наши пользователи испытали!
Теперь, когда мы обновили наши модели, нам нужно выполнить новые миграции в проекте, а затем применить эти миграции:
python3 manage.Py makemigrations python3 manage.py перенести
Администратор
Теперь откройте каталог / admin.py и добавьте поле заемщика
в класс BookInstanceAdmin
как в list_display
, так и в fieldsets
, как показано ниже. Это сделает поле видимым в разделе администратора, что позволит нам при необходимости назначить пользователя
и BookInstance
.
@ admin.register (BookInstance) класс BookInstanceAdmin (admin.ModelAdmin): list_display = ('книга', 'статус' , 'заемщик' , 'due_back', 'id') list_filter = ('статус', 'due_back') fieldsets = ( (Никто, { 'поля': ('книга', 'отпечаток', 'идентификатор') }), ('Доступность', { 'fields': ('status', 'due_back' , 'заемщик' ) }), )
Одолжить несколько книг
Теперь, когда появилась возможность одалживать книги конкретному пользователю, перейдите и одолжите несколько записей BookInstance
.Задайте для своего тестового пользователя поле заимствованных
, сделайте статус
«В ссуде» и установите даты погашения как в будущем, так и в прошлом.
Примечание : Мы не будем описывать процесс, так как вы уже знаете, как использовать сайт администратора!
В аренду просмотреть
Теперь мы добавим представление для получения списка всех книг, которые были предоставлены текущему пользователю. Мы будем использовать то же общее представление списка на основе классов, с которым мы знакомы, но на этот раз мы также импортируем и унаследуем от LoginRequiredMixin
, так что только зарегистрированный пользователь может вызывать это представление.Мы также выберем объявление template_name
, а не использовать значение по умолчанию, потому что у нас может получиться несколько разных списков записей BookInstance с разными представлениями и шаблонами.
Добавьте в каталог / views.py следующее:
из django.contrib.auth.mixins импорт LoginRequiredMixin класс LoanedBooksByUserListView (LoginRequiredMixin, generic.ListView): "" "Общий просмотр на основе классов, в котором перечислены книги, предоставленные текущему пользователю." "" model = BookInstance template_name = 'catalog / bookinstance_list_borrowed_user.html ' paginate_by = 10 def get_queryset (сам): вернуть BookInstance.objects.filter (заемщик = self.request.user) .filter (status__exact = 'o'). order_by ('due_back')
Чтобы ограничить наш запрос только объектами BookInstance
для текущего пользователя, мы повторно реализуем get_queryset ()
, как показано выше. Обратите внимание, что «o» - это сохраненный код для «взаймы», и мы заказываем до даты due_back
, чтобы в первую очередь отображались самые старые элементы.
URL conf для ссудных книг
Теперь откройте / catalog / urls.py и добавьте путь ()
, указывающий на приведенный выше вид (вы можете просто скопировать текст ниже в конец файла).
шаблонов URL + = [ путь ('mybooks /', views.LoanedBooksByUserListView.as_view (), name = 'my-заимствовано'), ]
Шаблон для кредитных книг
Теперь все, что нам нужно сделать для этой страницы, - это добавить шаблон. Сначала создайте файл шаблона /catalog/templates/catalog/bookinstance_list_borrowed_user.html и задайте ему следующее содержимое:
{% extends "base_generic.html "%} {% блокировать содержание%}Взятые книги
{% if bookinstance_list%}
-
{% для bookinst в bookinstance_list%}
- {{bookinst.book.title}} ({{bookinst.due_back}}) {% endfor%}
Книги взаймы нет.
{% endif%} {% endblock%} Этот шаблон очень похож на те, которые мы создали ранее для объектов Book
и Author
.Единственное, что здесь "ново", это то, что мы проверяем метод, который мы добавили в модели (bookinst.is_overdue
), и используем его для изменения цвета просроченных элементов.
Когда сервер разработки запущен, теперь вы должны иметь возможность просмотреть список для вошедшего в систему пользователя в своем браузере по адресу http://127.0.0.1:8000/catalog/mybooks/. Попробуйте это, когда ваш пользователь вошел в систему и вышел из нее (во втором случае вы должны быть перенаправлены на страницу входа).
Самый последний шаг - добавить ссылку для этой новой страницы на боковую панель.Мы поместим это в тот же раздел, где мы отображаем другую информацию для вошедшего в систему пользователя.
Откройте базовый шаблон ( /locallibrary/catalog/templates/base_generic.html ) и добавьте строку, выделенную жирным шрифтом, на боковую панель, как показано.
-
{% если user.is_authenticated%}
- Пользователь: {{user.get_username}}
- Мои заимствованные
- Выйти {% else%}
- Войти {% endif%}
Как это выглядит?
Когда любой пользователь вошел в систему, он увидит ссылку My Borrowed на боковой панели и список книг, показанный ниже (первая книга не имеет срока сдачи, и это ошибка, которую мы надеемся исправить позже. руководство!).
Разрешения
Разрешения связаны с моделями и определяют операции, которые могут выполняться с экземпляром модели пользователем, имеющим разрешение.По умолчанию Django автоматически дает добавить , изменить и удалить разрешения для всех моделей, которые позволяют пользователям с разрешениями выполнять связанные действия через сайт администратора. Вы можете определить свои собственные разрешения для моделей и предоставить их конкретным пользователям. Вы также можете изменить разрешения, связанные с разными экземплярами одной и той же модели.
Тогда тестирование разрешений в представлениях и шаблонах очень похоже на тестирование состояния аутентификации (и фактически, тестирование разрешения также проверяет аутентификацию).
Модели
Определение разрешений выполняется в разделе модели « class Meta
» с использованием поля permissions
. Вы можете указать столько разрешений, сколько вам нужно в кортеже, каждое разрешение определяется во вложенном кортеже, содержащем имя разрешения и отображаемое значение разрешения. Например, мы могли бы определить разрешение, позволяющее пользователю отмечать, что книга возвращена, как показано:
класс BookInstance (models.Model): ... класс Meta: ... permissions = (("can_mark_returned", "Установить книгу как возвращенную"),)
Затем мы могли бы назначить разрешение группе «Библиотекарь» на сайте администратора.
Откройте каталог / models.py и добавьте разрешение, как показано выше. Вам нужно будет повторно запустить ваши миграции (позвоните python3 manage.py makemigrations
и python3 manage.py migrate
), чтобы обновить базу данных соответствующим образом.
шаблоны
Права доступа текущего пользователя хранятся в переменной шаблона с именем {{perms}}
.Вы можете проверить, есть ли у текущего пользователя конкретное разрешение, используя конкретное имя переменной в соответствующем «приложении» Django - например, {{perms.catalog.can_mark_returned}}
будет Истинно
, если у пользователя есть это разрешение, и Ложь
в противном случае. Обычно мы проверяем наличие разрешения с помощью тега шаблона {% if%}
, как показано:
{% if perms.catalog.can_mark_returned%} {% endif%}
Просмотры
Разрешения
можно проверить в представлении функций с помощью декоратора permission_required
или в представлении на основе классов с помощью PermissionRequiredMixin
. Шаблон такой же, как и для аутентификации при входе, хотя, конечно, вам может потребоваться добавить несколько разрешений.
Декоратор представления функций:
из django.contrib.auth.decorators import permission_required @permission_required ('catalog.can_mark_returned ') @permission_required ('catalog.can_edit') def my_view (запрос): ...
Примесь, требующая разрешения для представлений на основе классов.
из django.contrib.auth.mixins импорт PermissionRequiredMixin класс MyView (PermissionRequiredMixin, View): permission_required = 'catalog.can_mark_returned' # Или несколько разрешений разрешение_required = ('catalog.can_mark_returned', 'catalog.can_edit') # Обратите внимание, что 'catalog.can_edit' - это просто пример # у приложения каталога нет такого разрешения!
Примечание : По умолчанию в поведении выше есть небольшая разница.По умолчанию для вошедшего в систему пользователя с нарушением разрешений:
-
@permission_required
перенаправляет на экран входа в систему (статус HTTP 302). -
PermissionRequiredMixin
возвращает 403 (HTTP-статус запрещен).
Обычно вам нужно поведение PermissionRequiredMixin
: вернуть 403, если пользователь вошел в систему, но не имеет правильных разрешений. Для этого для представления функции используйте @login_required
и @permission_required
с raise_exception = True
, как показано:
из django.contrib.auth.decorators import login_required, permission_required @login_required @permission_required ('catalog.can_mark_returned', raise_exception = True) def my_view (запрос): ...
Пример
Мы не будем обновлять LocalLibrary здесь; возможно, в следующем уроке!
Испытайте себя
Ранее в этой статье мы показали вам, как создать страницу для текущего пользователя со списком книг, которые они заимствовали. Теперь задача состоит в том, чтобы создать аналогичную страницу, которая будет видна только библиотекарям, на которой будут отображаться всех книг, которые были взяты взаймы, и которая включает имя каждого заемщика.
Вы должны иметь возможность следовать той же схеме, что и для другого вида. Основное отличие состоит в том, что вам нужно ограничить просмотр только библиотекарем. Вы можете сделать это в зависимости от того, является ли пользователь сотрудником (декоратор функции: staff_member_required
, переменная шаблона: user.is_staff
), но мы рекомендуем вместо этого использовать разрешение can_mark_returned
и PermissionRequiredMixin
, как описано в предыдущий раздел.
Внимание! : Помните, что не следует использовать суперпользователя для тестирования на основе разрешений (проверки разрешений всегда возвращают истину для суперпользователей, даже если разрешение еще не было определено!).Вместо этого создайте пользователя-библиотекаря и добавьте необходимые возможности.
Когда вы закончите, ваша страница должна выглядеть примерно так, как на скриншоте ниже.
Сводка
Отличная работа - теперь вы создали веб-сайт, на котором члены библиотеки могут входить в систему и просматривать свое содержимое, а библиотекари (с соответствующими разрешениями) могут использовать его для просмотра всех книг, предоставленных взаймы, и их заемщиков. В настоящий момент мы все еще просто просматриваем контент, но те же принципы и методы используются, когда вы хотите начать изменять и добавлять данные.
В нашей следующей статье мы рассмотрим, как можно использовать формы Django для сбора пользовательского ввода, а затем начать изменять некоторые из наших сохраненных данных.
См. Также
В этом модуле
OAuth 2.0 - Авторизация - Документация
Использование токена доступа
Сделайте запросы к Zoom API, отправив access_token
в качестве заголовка носителя авторизации.
«Авторизация»: «предъявитель »
Пример запроса:
ПОЛУЧИТЬ
https: // api.zoom.us/v2/users/me
Примечание. Эта конечная точка использует контекст / me.
Заголовки запроса:
{
"Авторизация": «Знаменосец eyJhbGciOiJIUzUxMiIsInYiOiIyLjAiLCJraWQiOiI8S0lEPiJ9.eyJ2ZXIiOiI2IiwiY2xpZW50SWQiOiI8Q2xpZW50X0lEPiIsImNvZGUiOiI8Q29kZT4iLCJpc3MiOiJ1cm46em9vbTpjb25uZWN0OmNsaWVudGlkOjxDbGllbnRfSUQ-IiwiYXV0aGVudGljYXRpb25JZCI6IjxBdXRoZW50aWNhdGlvbl9JRD4iLCJ1c2VySWQiOiI8VXNlcl9JRD4iLCJncm91cE51bWJlciI6MCwiYXVkIjoiaHR0cHM6Ly9vYXV0aC56b29tLnVzIiwiYWNjb3VudElkIjoiPEFjY291bnRfSUQ-IiwibmJmIjoxNTgwMTQ2OTkzLCJleHAiOjE1ODAxNTA1OTMsInRva2VuVHlwZSI6ImFjY2Vzc190b2tlbiIsImlhdCI6MTU4MDE0Njk5MywianRpIjoiPEpUST4iLCJ0b2xlcmFuY2VJZCI6MjV9.F9o_w7_lde4Jlmk_yspIlDc-6QGmVrCbe_6El-xrZehnMx7qyoZPUzyuNAKUKcHfbdZa6Q4QBSvpd6eIFXvjHw "
}
В случае успеха тело ответа будет JSON-представлением вашего пользователя:
{
"id": "KdYKjnimT4KPd8FFgQt9FQ",
"first_name": "Джейн",
"last_name": "Dev",
"электронная почта": "[email protected]",
«тип»: 2,
"role_name": "Владелец",
«pmi»: 1234567890,
"use_pmi": ложь,
"vanity_url": "https://janedevinc.zoom.us/my/janedev",
"personal_meeting_url": "https: // janedevinc.zoom.us/j/1234567890 ",
"часовой пояс": "Америка / Денвер",
"проверено": 1,
"отдел": "",
"created_at": "2019-04-05T15: 24: 32Z",
"last_login_time": "2019-12-16T18: 02: 48Z",
"last_client_version": "4.6.12611.1124 (mac)",
"pic_url": "https://janedev.zoom.us/p/KdYKjnimFR5Td8KKdQt9FQ/19f6430f-ca72-4154-8998-ede6be4542c7-837",
"host_key": "533895",
"jid": "[email protected]",
"group_ids": [],
"im_group_ids": [
"3NXCD9VFTCOUH8LD-QciGw"
],
"account_id": "gVcjZnYYRLDbb_MfgHuaxg",
"language": "en-US",
"phone_country": "США",
"phone_number": "+1 1234567891",
"статус": "активный"
}
Формы прибытия / отъезда: I-94 и I-94W
Иностранные посетители U.S., прибывающим воздушным или морским путем, больше не нужно заполнять бумажную форму I-94 «Отчет о прибытии / убытии» или форму I-94W «Отчет о прибытии / отбытии без иммиграционной визы». Те, кому необходимо подтвердить свой статус законного посетителя - работодателям, школам / университетам или государственным учреждениям - могут получить доступ к своей записи о прибытии / отбытии CBP онлайн.
CBP теперь автоматически собирает информацию о прибытии / отбытии путешественников из их электронных путевых записей. Поскольку предварительная информация передается только воздушным и морским путешественникам, CBP по-прежнему будет выдавать бумажную форму I-94 в наземных пограничных портах въезда.
Если путешественникам нужна информация из их регистрационной записи о допуске по форме I-94 для подтверждения иммиграционного статуса или разрешения на работу, номер записи и другая информация о допуске, им рекомендуется получить свой номер I-94.
По прибытии офицер CBP ставит в проездном документе каждого прибывающего путешественника, не являющегося иммигрантом, дату допуска, класс допуска и дату, до которой путешественник будет допущен. Если путешественник хочет бумажную форму I-94, ее можно запросить в процессе проверки.Все запросы будут размещены во вторичной среде.
При выезде из США путешественники, ранее оформившие бумажную форму I-94, должны сдать ее коммерческому перевозчику или CBP при отбытии. В противном случае CBP зафиксирует отъезд в электронном виде с помощью информации о манифесте, предоставленной перевозчиком или CBP.
Эта автоматизация упрощает процесс въезда для путешественников, способствует обеспечению безопасности и сокращает федеральные расходы. CBP считает, что автоматизированный процесс сэкономит агентству 15 долларов.5 миллионов в год.
Для получения дополнительной информации и ответов на часто задаваемые вопросы см. Информационный бюллетень I-94.
Информационный центр CBP предлагает вопросы и ответы по I-94.
ВНИМАНИЕ: С мая 2019 года номера I-94 будут буквенно-цифровыми. В настоящее время номера I-94 состоят из 11 цифр и содержат только цифры. Чтобы свести к минимуму влияние программы в результате истощения только цифровых номеров I-94 и создать долгосрочное решение для создания новых номеров, CBP переходит на буквенно-цифровые I-94.Номера I-94 будут состоять из 11 знаков, но будут иметь формат из 9 цифр, за которыми следует буква в 10-й позиции и цифра в 11-й позиции. Неистекшие I-94, выданные в текущем числовом формате, будут оставаться действительными до даты допуска до даты, указанной на бумаге I-94, и / или даты, указанной на общедоступном веб-сайте I-94 по адресу https: //i94.cbp .dhs.gov / I94 / # / home.
Аутентификация и авторизация пользователей в Apache Kafka - IBM Developer
Две встроенные функции безопасности Apache Kafka:
контроль доступа пользователей и шифрование данных.Пока производственный кластер Kafka
обычно предоставляет обе эти функции, они не обязательно требуются в
среды разработки, тестирования или экспериментов. На самом деле некоторая продукция
среды не нуждаются в этих функциях, например, когда кластер находится за
брандмауэр. Среда реализации кластера и другие соображения играют важную роль.
роль при принятии решения, какие функции безопасности необходимо реализовать в Kafka
кластер. В этом руководстве вы узнаете, как аутентификация пользователя и
авторизация может быть реализована.Если также требуется шифрование данных, оно может
быть настроенным поверх конфигураций управления доступом пользователей, описанных здесь.
Эта статья предназначена для тех, кто имеет базовые представления об Apache.
Концепции Kafka, знать, как настроить кластер Kafka, и работать с его основными
инструменты.
Терминология
Kafka обеспечивает аутентификацию и авторизацию с помощью Kafka Access Control
Списки (ACL) и через несколько интерфейсов (командная строка, API и т. Д.) Каждый
Kafka ACL - это заявление в следующем формате:
Принципал P - это [разрешенная / запрещенная] операция O с хоста H на ресурсе R.
Показать ещеПоказать еще значок
В этом заявлении
- Принципал является пользователем Kafka.
- Операция - одна из
Чтение
,Запись
,Создание
,Описать
,Alter
,Удалить
,DescribeConfigs
,AlterConfigs
,0008000 Clusterrite
000,.
- Хост - это сетевой адрес (IP), с которого клиент Kafka подключается к брокеру.
- Ресурс является одним из следующих ресурсов Kafka:
Topic
,Group
,Cluster
,TransactionalId
.
Не все операции применимы к каждому ресурсу. Текущий список операций для каждого ресурса приведен в таблице ниже. Все ассоциации можно найти в исходном коде:
Тема | Чтение, запись, описание, удаление, DescribeConfigs, AlterConfigs, все |
Группа | Прочитать, описать, все |
Кластер | Create, ClusterAction, DescribeConfigs, AlterConfigs, IdempotentWrite, Alter, Describe, все |
TransactionalId | Описание, запись, все |
Фон
Существуют практические статьи, в которых рассказывается, как использовать списки ACL Kafka (например,грамм. Apache Kafka Security 101), но они также включают в себя шифрование. В этой статье показано, как настроить списки управления доступом, не беспокоясь о шифровании. Протокол SASL_PLAINTEXT: используется аутентификация SASL по текстовому каналу. После того, как аутентификация SASL установлена между клиентом и сервером, в сеансе клиентский участник является аутентифицированным пользователем. В этом случае шифрование проводов отсутствует, так как вся связь по каналу осуществляется посредством обычного текста.
Kafka управляет списками ACL и обеспечивает их соблюдение через авторизатор.Авторизатор реализует определенный интерфейс и является подключаемым. Kafka предоставляет реализацию авторизатора по умолчанию (SimpleAclAuthorize), которая хранит ACL в ZooKeeper. Имя класса авторизатора предоставляется через конфигурацию брокера authorizer.class.name
. Если такой конфигурации не существует, то все аутентифицируются и имеют право доступа к любому ресурсу.
Типичный рабочий процесс авторизации Kafka показан ниже. При запуске брокер Kafka инициирует загрузку ACL.Заполненный кеш ACL поддерживается и используется для целей аутентификации и авторизации всякий раз, когда поступает запрос API.
Чтобы реализовать аутентификацию и реализацию пользователей в кластере Kafka, необходимо правильно настроить как брокеры, так и клиенты. Брокерам необходимо знать действительные учетные данные, а клиентам необходимо предоставить действительные учетные данные для правильного выполнения базовых команд. В следующих разделах эти конфигурации описываются на примерах.
Конфигурация на стороне брокера
Чтобы включить аутентификацию и авторизацию на стороне брокера, необходимо
выполнить два шага: настроить действительные учетные данные для каждого брокера и настроить
брокер с надлежащим протоколом безопасности и авторизатором доступа
реализация.
Настройка учетных данных на стороне брокера
Настройте брокера с его учетными данными и авторизуйте пользователя клиента
учетные данные. Эти учетные данные вместе со спецификацией модуля входа в систему
хранится в конфигурации входа в JAAS
файл.Это файл JAAS, используемый для запуска сценариев использования, описанных в этой статье:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule требуется
username = "admin"
пароль = "админ"
user_admin = "админ"
user_alice = "алиса"
user_bob = "боб"
user_charlie = "Чарли";
};
Показать ещеПоказать еще значок
В этом примере для объекта KafkaServer
определяется следующее:
- настраиваемый модуль входа в систему, который используется для аутентификации пользователя,
-
admin
/admin
- это имя пользователя и пароль для связи между брокерами (т.е.е. учетные данные, которые брокер использует для подключения к другим брокерам в кластере), -
admin
/admin
,alice
/alice
,bob
/bob
иcharlie
/charlie
в качестве учетных данных клиента. Обратите внимание, что действительные имя пользователя и пароль предоставляются в следующем формате:user_username = "пароль"
. Если строкаuser_admin = "admin"
удалена из этого файла, брокер не сможет аутентифицировать и авторизовать пользователяadmin
.Только пользовательadmin
может подключаться к другим брокерам в этом случае.
Передайте этот файл как параметр конфигурации JVM при запуске брокера, используя -Djava.security.auth.login.config = [path_to_jaas_file]
. [path_to_jaas_file]
может быть примерно таким: config / jaas-kafka-server.conf
. Один из способов принудительно применить эту конфигурацию JVM - сделать копию сценария kafka-server-start.sh
(в папке bin
Kafka) и изменить последнюю строку с
exec $ base_dir / kafka-run-class.sh $ EXTRA_ARGS kafka.Kafka "$ @"
Показать ещеПоказать еще значок
С
по
exec $ base_dir / kafka-run-class.sh $ EXTRA_ARGS -Djava.security.auth.login.config = $ base_dir /../ config / jaas-kafka-server.conf kafka.Kafka "$ @"
Показать ещеПоказать еще значок
Этот модифицированный сценарий запуска брокера называется sasl-kafka-server-start.sh
. Чтобы узнать о других методах предоставления файла конфигурации входа в систему JAAS, обратитесь к этому ответу.
Настроить протокол на стороне брокера
Определите принятый протокол и авторизатор ACL, используемые брокером, добавив следующую конфигурацию в файл свойств брокера ( server.свойства
):
authorizer.class.name = kafka.security.auth.SimpleAclAuthorizer
слушатели = SASL_PLAINTEXT: //: 9092
security.inter.broker.protocol = SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol = ОБЫЧНАЯ
sasl.enabled.mechanisms = ОБЫЧНАЯ
Показать ещеПоказать еще значок
Другая конфигурация, которую можно добавить, предназначена для суперпользователей Kafka: пользователей с полным доступом ко всем API. Эта конфигурация снижает накладные расходы на определение списков ACL для каждого API для пользователя, который должен иметь полный доступ к API.Из нашего списка пользователей давайте сделаем admin
суперпользователем со следующей конфигурацией:
Этот измененный файл свойств называется sasl-server.properties
.
Когда брокер работает с этой конфигурацией безопасности ( bin / sasl-kafka-server-start.sh config / sasl-server.properties
), только аутентифицированные и авторизованные клиенты могут подключаться к нему и использовать его.
Примечание. В настоящее время есть исключения из этого утверждения. Тематические и связанные с ACL мероприятия (т.е. CreateTopics
, DescribeTopics
, AlterTopics
, DeleteTopics
, CreateAcls
, DescribeAcls
, DeleteAcls
), обрабатываемые напрямую через ZooKeeper, не поддерживают ACL. Чтобы защитить эти API, можно использовать другие средства (например, сетевые брандмауэры), чтобы анонимные пользователи не могли вносить изменения в темы Kafka или ACL Kafka. Полная поддержка ACL API будет реализована в будущем выпуске Kafka.
После того, как вы выполните шаги 1 и 2, брокеры Kafka будут готовы к аутентификации и авторизации клиентов.В следующем разделе вы узнаете, как включить клиентов Kafka для аутентификации.
Конфигурация на стороне клиента
В предыдущем разделе вы определили набор учетных данных пользователя, которые аутентифицируются брокером Kafka. В этом разделе вы узнаете, как инструменты командной строки Kafka могут быть аутентифицированы с помощью защищенного брокера с помощью простого сценария использования. Вариант использования включает пользователей alice
, bob
и charlie
где:
-
Алиса
производит по теметест
. -
bob
потребляет из темыtest
в группе потребителейbob-group
. -
charlie
запрашивает группуbob-group
, чтобы получить смещения группы.
Пока что брокер настроен для аутентифицированного доступа. При запуске производителя или потребителя консоли Kafka, не настроенного для аутентифицированного и авторизованного доступа, возникают следующие сообщения (при условии, что auto.create.topics.enable
равно true
):
$ бин / кафка-консоль-производитель.sh --broker-list localhost: 9092 --topic test
[2017-10-24 15: 44: 18,530] ПРЕДУПРЕЖДЕНИЕ [Producer clientId = console-maker] Локальный хост брокера начальной загрузки: 9092 (id: -1 стойка: null) отключен (org.apache.kafka.clients.NetworkClient)
...
Показать ещеПоказать еще значок
или
$ bin / kafka-console-consumer.sh --bootstrap-server localhost: 9092 --topic test
[2017-10-24 15: 44: 56,426] ПРЕДУПРЕЖДЕНИЕ [Consumer clientId = consumer-1, groupId = console-consumer-7511] Bootstrap broker localhost: 9092 (id: -1 rack: null) отключен (org.apache.kafka.clients.NetworkClient)
...
Показать ещеПоказать еще значок
Клиенты Kafka (производитель, потребитель и т. Д.) Настраиваются для аутентификации и авторизации с помощью брокера Kafka в два этапа: предоставить действительные учетные данные и указать протокол безопасности.
Настройка учетных данных на стороне клиента
Укажите файл конфигурации входа в систему JAAS для аутентификации учетных данных. Содержимое файла JAAS для пользователя alice
(например, jaas-kafka-client-alice.conf
) выглядит следующим образом:
KafkaClient {
орг.apache.kafka.common.security.plain.PlainLoginModule требуется
username = "алиса"
пароль = "алиса";
};
Показать ещеПоказать еще значок
Эти учетные данные также могут быть предоставлены с помощью параметра конфигурации JVM. Например, Алиса может использовать копию клиентов консоли, передав свой файл JAAS команде клиента. В этом случае последняя строка производителя консоли Алисы ( sasl-kafka-console-producer-alice.sh
) изменена с исходного сценария на это:
exec $ (имя каталога $ 0) / kafka-run-class.sh -Djava.security.auth.login.config = $ (имя каталога $ 0) /../ config / jaas-kafka-client-alice.conf kafka.tools.ConsoleProducer "$ @"
Показать ещеПоказать еще значок
Настроить учетные данные на стороне клиента
Укажите протокол брокера для использования на стороне клиента. Конфигурация:
security.protocol = SASL_PLAINTEXT
sasl.mechanism = ОБЫЧНАЯ
Показать ещеПоказать еще значок
помещается в соответствующий файл конфигурации ( sasl-producer-alice.properties
), предоставляемый конкретному клиенту.Например,
bin / sasl-kafka-console-producer-alice.sh --broker-list localhost: 9092 --topic test --producer.config config / sasl-producer-alice.properties
bin / sasl-kafka-console-consumer-bob.sh --bootstrap-server localhost: 9092 --topic test --group bob-group --consumer.config config / sasl-consumer-bob.properties
bin / sasl-kafka-consumer-groups-charlie.sh --bootstrap-server localhost: 9092 --describe --group bob-group --command-config config / sasl-consumergroup-charlie.properties
Показать ещеПоказать еще значок
Обратите внимание, что файлы config / sasl-consumer-bob.свойства
и config / sasl-consumergroup-charlie.properties
имеют те же две строки, что и выше.
Если вы запустите эти команды с конфигурацией до сих пор, вы заметите, что они не работают должным образом. Например,
$ bin / sasl-kafka-console-producer-alice.sh --broker-list localhost: 9092 --topic test --producer.config config / sasl-producer-alice.properties
> сообщение1
[2017-10-24 16: 20: 52,259] ПРЕДУПРЕЖДЕНИЕ [Producer clientId = console-maker] Ошибка при получении метаданных с идентификатором корреляции 1: {test = TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient)
[2017-10-24 16: 20: 52,260] ERROR Ошибка при отправке сообщения в тестовую тему с ключом: null, значение: 1 байт с ошибкой: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TopicAuthorizationException: не авторизован для доступа к темам: [тест]
>
Показать ещеПоказать еще значок
или
$ bin / sasl-kafka-console-consumer-bob.sh --bootstrap-server localhost: 9092 --topic test --group bob-group --consumer.config config / sasl-consumer-bob.properties
[2017-10-24 16: 27: 01,431] WARN [Consumer clientId = consumer-1, groupId = bob-group] Ошибка при получении метаданных с идентификатором корреляции 2: {test = TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients. NetworkClient)
[2017-10-24 16: 27: 01,435] ОШИБКА Неизвестная ошибка при запуске потребителя: (kafka.tools.ConsoleConsumer $)
org.apache.kafka.common.errors.TopicAuthorizationException: не авторизован для доступа к темам: [тест]
Показать ещеПоказать еще значок
или
$ bin / sasl-kafka-consumer-groups-charlie.sh --bootstrap-server localhost: 9092 --describe --group bob-group --command-config config / sasl-consumergroup-charlie.properties
Примечание. При этом не будет отображаться информация о старых потребителях на основе Zookeeper.
Ошибка: Выполнение команды группы потребителей не удалось из-за Не авторизован для группы доступа: Ошибка авторизации группы.
Показать ещеПоказать еще значок
Конфигурация безопасности по-прежнему не дает определенных разрешений для наших пользователей Kafka (за исключением admin
, который является суперпользователем).Эти разрешения определяются с помощью команды ACL ( bin / kafka-acls.sh
). Чтобы проверить существующие ACL, запустите:
bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --list
Показать ещеПоказать еще значок
Это не возвращает определения ACL. Вы выполнили аутентификацию, но не предоставили никаких правил авторизации для определения пользователей, которые могут запускать определенные API и получать доступ к определенным ресурсам Kafka.Это рассматривается в следующем разделе.
Определения ACL
Чтобы разрешить конкретному пользователю выполнять определенную функцию Kafka или получать доступ к определенному ресурсу Kafka, создайте правило, которое позволяет пользователю и только этому пользователю делать это. Правило должно быть очень конкретным, чтобы пользователь не мог получить доступ к каким-либо непреднамеренным функциям или ресурсам Kafka. Этой цели служит общий оператор ACL в начале этой статьи. В этом разделе вы используете этот общий оператор для предоставления необходимого доступа пользователям alice
, bob
и charlie
.Это позволяет каждому пользователю выполнить часть предыдущего варианта использования (т.е. Алиса
производит по теме test
, bob
потребляет из темы test
в группе потребителей bob-group
и charlie
запрашивает группа потребителей bob-group
). Список API-интерфейсов, а также требуемые для них разрешения и ресурсы приведены в таблице ниже. Обратитесь к этой таблице, чтобы определить, какие разрешения необходимо предоставить каким пользователям для того, чтобы сценарий использования работал бесперебойно.
0 | Продукция | Написать | Тема | |
0 | Продукция | Написать | TransactionalId | Только транзакционный производитель |
0 | Продукция | IdempotentWrite | Кластер | Только идемпотентный производитель |
1 | Получить | Читать | Тема | |
2 | Смещения | Описать | Тема | |
3 | Метаданные | Описать | Тема | |
3 | Метаданные | Создать | Кластер | Только если авто.create.topics.enable верно |
4 | LeaderAndIsr | ClusterAction | Кластер | |
5 | StopReplica | ClusterAction | Кластер | |
6 | ОбновитьМетаданные | ClusterAction | Кластер | |
7 | Контролируемое отключение | ClusterAction | Кластер | |
8 | OffsetCommit | Читать | Группа | |
8 | OffsetCommit | Читать | Тема | |
9 | OffsetFetch | Описать | Группа | |
9 | OffsetFetch | Описать | Тема | |
10 | FindCoordinator | Описать | Группа | Координатор группы запрашивает только |
10 | FindCoordinator | Описать | TransactionalId | Координатор транзакций запрашивает только |
11 | JoinGroup | Читать | Группа | |
12 | Сердцебиение | Читать | Группа | |
13 | LeaveGroup | Читать | Группа | |
14 | SyncGroup | Читать | Группа | |
15 | Описать группы | Описать | Группа | |
16 | ListGroups | Описать | Кластер | |
17 | SaslHandshake | – | – | |
18 | Версии Api | – | – | |
19 | CreateTopics | Создать | Кластер | |
20 | Удалить темы | Удалить | Тема | |
21 | DeleteRecords | Удалить | Тема | |
22 | InitProducerId | Написать | TransactionalId | Только транзакционный производитель |
22 | InitProducerId | IdempotentWrite | Клутер | Только идемпотентный производитель |
23 | OffsetForLeaderEpoch | ClusterAction | Кластер | |
24 | AddPartitionsToTxn | Написать | TransactionalId | |
24 | AddPartitionsToTxn | Написать | Тема | Только внутренние темы |
25 | AddOffsetsToTxn | Написать | TransactionalId | |
25 | AddOffsetsToTxn | Читать | Группа | |
26 | EndTxnWrite | TransactionalId | ||
27 | WriteTxnMarkers | ClusterAction | Кластер | |
28 | TxnOffsetCommit | Написать | TransactionalId | |
28 | TxnOffsetCommit | Читать | Группа | |
28 | TxnOffsetCommit | Читать | Тема | |
29 | DescribeAcls | Описать | Кластер | |
30 | CreateAcls | Alter | Кластер | |
31 | DeleteAcls | Alter | Кластер | |
32 | DescribeConfigs | DescribeConfigs | Кластер | Только для типа ресурса брокера |
32 | DescribeConfigs | DescribeConfigs | Тема | Только для тематического ресурса типа |
33 | AlterConfigs | AlterConfigs | Кластер | Только для типа ресурса брокера |
33 | AlterConfigs | AlterConfigs | Тема | Только для типа ресурса темы |
34 | AlterReplicaLogDirs | Alter | Кластер | |
35 | DescribeLogDirs | Описать | Кластер | |
36 | SaslAuthenticate | – | – | |
37 | CreatePartitions | Alter | Тема |
Продюсирование по темам
Предположим, на этом этапе создана тема test
с 3 разделами:
bin / kafka-themes.sh --zookeeper localhost: 2181 --create --topic test --partitions 3 --replication-factor 1
Показать ещеПоказать еще значок
Начать с пользователя alice
. Алисе необходимо иметь возможность производить тест по теме , используя API
Produce
. Для этого упражнения пользователи могут подключаться к брокеру с любого хоста. При необходимости ограничения хоста также могут быть встроены в списки управления доступом Kafka, обсуждаемые в этом разделе. Для этого варианта использования соответствующий ACL Kafka:
Основной алисе разрешена операция Запись с хоста * Тест по теме.
Показать ещеПоказать еще значок
или
bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --add --allow-Principal Пользователь: alice --operation Запись --topic test
Показать ещеПоказать еще значок
Ожидаемый результат:
Добавление ACL для ресурса `Тема: тест`:
Пользователь: Алиса имеет разрешение на выполнение операций: Запись с хостов: *
Текущие списки ACL для ресурса `Topic: test`:
Пользователь: Алиса имеет разрешение на выполнение операций: Запись с хостов: *
Показать ещеПоказать еще значок
В результате предоставления ей этого разрешения Алиса теперь может создавать сообщения в тему test
:
$ bin / sasl-kafka-console-производителя-alice.sh --broker-list localhost: 9092 --topic test --producer.config config / client-sasl.properties
> сообщение1
> сообщение2
> сообщение3
...
Показать ещеПоказать еще значок
Потребление из тем
Затем вам нужно разрешить пользователю bob
использовать (или получать) из темы test
с использованием Fetch
API, как члену группы потребителей bob-group
. ACL Боба для выборки из темы test
:
Основной bob разрешен для операции чтения с хоста * в тесте по теме.
Показать ещеПоказать еще значок
или
$ bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --add --allow-Principal Пользователь: bob --operation Читать --topic контрольная работа
Добавление ACL для ресурса `Тема: тест`:
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Текущие списки ACL для ресурса `Topic: test`:
Пользователь: Алиса имеет разрешение на выполнение операций: Запись с хостов: *
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Показать ещеПоказать еще значок
Бобу нужен второй ACL для фиксации смещений в группе bob-group
(с использованием OffsetCommit
API):
Основной bob разрешен для операции чтения с хоста * в группе bob-group.
Показать ещеПоказать еще значок
или
$ bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --add --allow-Principal Пользователь: bob --operation Читать --group боб-группа
Добавление ACL для ресурса `Group: bob-group`:
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Текущие ACL для ресурса `Group: bob-group`:
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Показать ещеПоказать еще значок
Предоставляя эти разрешения Бобу, он теперь может получать сообщения из темы test
как член bob-group
.
$ bin / sasl-kafka-console-consumer-bob.sh --bootstrap-server localhost: 9092 --topic test --group bob-group --consumer.config config / sasl-consumer-bob.properties - с начала
сообщение3
сообщение1
сообщение2
...
Показать ещеПоказать еще значок
Описание групп потребителей
Наконец, пользователю charlie
требуется разрешение на получение подтвержденных смещений из группы bob-group
(с использованием OffsetFetch
API). Согласно приведенной выше таблице, первый ACL Чарли для получения смещений от этой группы потребителей:
Принципалу charlie разрешена операция «Описание с хоста» * в группе bob-group.
Показать ещеПоказать еще значок
или
$ bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --add --allow-Principal Пользователь: charlie --operation Describe --group боб-группа
Добавление ACL для ресурса `Group: bob-group`:
Пользователь: charlie имеет разрешение на выполнение операций: описание с хостов: *
Текущие ACL для ресурса `Group: bob-group`:
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Пользователь: charlie имеет разрешение на выполнение операций: описание с хостов: *
Показать ещеПоказать еще значок
Одного этого разрешения недостаточно для соответствия варианту использования.Если Чарли запускает команду группы потребителей, он не видит никаких строк в выводе. Чарли нужно прочитать (получить) смещения тем в группе потребителей. Для этого у него должен быть Describe
доступ ко всем темам в группе. Согласно приведенной выше таблице, этот второй ACL:
Директору Чарли разрешена операция «Описание с хоста * в теме».
Показать ещеПоказать еще значок
или
$ bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --add --allow-Principal Пользователь: charlie --operation Описание --topic test
Добавление ACL для ресурса `Тема: тест`:
Пользователь: charlie имеет разрешение на выполнение операций: описание с хостов: *
Текущие списки ACL для ресурса `Topic: test`:
Пользователь: Алиса имеет разрешение на выполнение операций: Запись с хостов: *
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Пользователь: charlie имеет разрешение на выполнение операций: описание с хостов: *
Показать ещеПоказать еще значок
Теперь Чарли может получить правильный список зачетов в группе:
$ bin / sasl-kafka-consumer-groups-charlie.sh --bootstrap-server localhost: 9092 --describe --group bob-group --command-config config / sasl-consumergroup-charlie.properties
Примечание. При этом не будет отображаться информация о старых потребителях на основе Zookeeper.
В группе потребителей «боб-груп» нет активных участников.
ТЕМА РАЗДЕЛ CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
тест 1 1 1 0 - - -
тест 0 1 1 0 - - -
тест 2 1 1 0 - - -
Показать ещеПоказать еще значок
Вот и все.Приведенные выше списки управления доступом предоставляют достаточно разрешений для запуска этого варианта использования. Подводя итог, ACL -
$ bin / kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect = localhost: 2181 --list
Текущие списки ACL для ресурса `Topic: test`:
Пользователь: Алиса имеет разрешение на выполнение операций: Запись с хостов: *
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Пользователь: charlie имеет разрешение на выполнение операций: описание с хостов: *
Текущие ACL для ресурса `Group: bob-group`:
Пользователь: bob имеет разрешение на выполнение операций: чтение с хостов: *
Пользователь: charlie имеет разрешение на выполнение операций: описание с хостов: *
Показать ещеПоказать еще значок