Не завидуйте мандаринкам или бессмертным, а корректируйте строчку кода долго. Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Кас здесь не CAS в параллельном пакете Java.Студенты, которые использовали единый вход (SSO), должны быть знакомы с ним. Эта штука такая старая, а экология такая огромная, что я до сих пор содрогаюсь при мысли об этом. Долгое время, чтобы сделать single sign-on, нужно было в той или иной степени обращаться к CAS, что было головной болью.
Конечно, у нас есть другой вариант:keycloak
, который производится jboss. Все, что производит jboss, на удивление тяжеловесно, и keycloak не исключение, перекрывая функции различных сценариев аутентификации авторизации. Это и понятно, ведь аутентификация — грязная и утомительная работа, и инкапсулировать ее непросто.
Это привело к тому, что, хотя keycloak обеспечивает простой в использовании фон управления, если вы не понимаете некоторые концепции проверки, его нелегко использовать.
Сегодня xjjdog приступит к быстрому старту, чтобы попробовать на вкус этот сервис разрешений.
Сначала загрузите его установочный пакет.
wget -c https://downloads.jboss.org/keycloak/11.0.2/keycloak-11.0.2.zip
Выполнить в каталоге bin./standalone.sh
файл для началаkeycloak server
. Вы можете увидеть это, слушая9990
порт.
На данный момент доступ к этой ссылке не дает никакой информации, потому что в ней еще нет начального пользователя. Так же, как Пангу создал мир, нам нужен Пангу.
использоватьadd-user.sh
команда для инициализации пользователя. Если вы инициализируете сadmin
, вам нужно сначала включить его. После инициализации вы можете настроить его в фоновом режиме доступа.
Keycloak Server развернут на порту 8080 и доступен по ссылке ниже.
http://127.0.0.1:8080/auth/
1. Создайте миры
Чтобы использовать Keycloak, вам нужно сначала создать Realm. Область означает область, в которой все пользователи и разрешения независимы. Если эти компании захотят, я могу разместить всех пользователей Jingdong и Taobao на одном сервере.
Приведенный выше пример иллюстрирует, что Realm является мерой изоляции. Наведите указатель мыши на левый верхний угол и нажмитеadd realm
для входа на страницу создания.
Создать область так же просто, как указать имя.
Но не будьте слишком счастливы. Что касается глобальной конфигурации, то ее вариантов определенно очень много. Однако это настраиваемое расширенное использование, здесь мы его обсуждать не будем.
2. Создайте разрешения
Далее будут созданы две группы разрешений. Разрешения также легче понять, просто строка. мы создаемROLE_ADMIN
иROLE_USER
два разрешения.
3. Создать пользователя
Время создать пользователя. Нажмите «Создать» на вкладке «Пользователи», чтобы создать каталог. Здесь мы создаем пользователя с именем xjjdog0.
Есть также много вариантов для пользователей. В основном мы фокусируемся на двух частях. одинCredentials
, вы можете обновить пароль установленного пользователя; одинRole Mappings
, вы можете установить разрешения пользователя. Давайте сделаем это здесь, установим пароль xjjdog0 на123456
.
Обратите внимание, что здесь есть небольшая деталь. Если мы обновим пароль пользователя. На главной странице пользовательских настроек будетupdate Password
шрифт. Это означает, что пользователю необходимо обновить свой собственный пароль один раз, прежде чем пользователь сможет его использовать. Если вам не нужно заставлять пользователя снова устанавливать пароль, вы можете удалить его.
Конечно, мы удалили его.
4. Создать клиента
Чтобы выполнить авторизационную аутентификацию в поле xjjdog, вам также необходимо получить идентификатор клиента, чтобы указать вашу личность.
Здесь мы создали клиент с именем xjjdemo, который позже будет добавлен в интерфейс токена.
5. Протестируйте интерфейс токена
Адрес для получения интерфейса:
ip:port/auth/realms/icp/protocol/openid-connect/token
Здесь, в соответствии с адресной информацией, которую мы установили выше, адрес запроса токена может быть построен как:
http://localhost:8080/auth/realms/xjjdog/protocol/openid-connect/token
Используйте curl, чтобы получить токен.
curl -XPOST -d 'client_id=xjjdemo&grant_type=password&scope=openid&username=xjjdog0&password=123456' http://localhost:8080/auth/realms/xjjdog/protocol/openid-connect/token
при условииclient_id
,grant_type
,username
,password
и другие параметры, json будет возвращен после отправки почтового запроса.
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItMXF4RW9NTU1ON29NM2NrZUhPaEowaFVZVGxQNThfMDNwMDYzV1hIVzQwIn0.eyJleHAiOjE2MDI2NTQ1NzMsImlhdCI6MTYwMjY1NDI3MywianRpIjoiMGQ1ZmZhNzgtZTQ5OS00MmFmLTgyMTUtNjgwODNiNjQ4ODRlIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL3hqamRvZyIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiJjYWQ3NjNiMS01OTg3LTQzYTItOGQ4MC0yZDVlODY1ZGI3MTYiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ4ampkZW1vIiwic2Vzc2lvbl9zdGF0ZSI6ImQxMWQzOWM2LTBhMzItNDNlYi1iYTIyLTg1MzdlZWE4MDcwNiIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiLyoiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIlJPTEVfVVNFUiIsIm9mZmxpbmVfYWNjZXNzIiwiUk9MRV9BRE1JTiIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoieGpqZG9nMCJ9.DVX3VtSjq-hSsjEWqudKIcZhSpIuuDyalRx0epD93HMX8ap5z_7LpeITdb3aRv3AFIBQe8d80SsDZwUIj9NSobyMo8US4ZF4cLyHEYsp881-vJInnrQ-vbnxwShsx1r1S8NO7dV1CP-aD8b611JBtzxV-P6GPbiZH283BFMnKFHQ68aox0_VYEx3dq3PA53LyM8-_rCElrpyTHk1dUdC7OluPgLx390m9H0TV_2aR9ufXGA4e-xW5fmOFvAHGlg_t3BoDVAduQkoy_wYHA_NbP3uRIOcC0pgOonAsspT2lXA_xkPU8oIpPvBQzcV4eWivm1WV_y6K4kOvn0ZJtkFmA",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJjNGMwMzMzOC04MDU5LTRlNDItODYxMC1iYzkzMjNjZDY5NmIifQ.eyJleHAiOjE2MDI2NTYwNzMsImlhdCI6MTYwMjY1NDI3MywianRpIjoiNGE5ZjgxMGItMzc1ZC00OGRmLTg3YjYtN2UwODY4MmFhNDYxIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL3hqamRvZyIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9hdXRoL3JlYWxtcy94ampkb2ciLCJzdWIiOiJjYWQ3NjNiMS01OTg3LTQzYTItOGQ4MC0yZDVlODY1ZGI3MTYiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoieGpqZGVtbyIsInNlc3Npb25fc3RhdGUiOiJkMTFkMzljNi0wYTMyLTQzZWItYmEyMi04NTM3ZWVhODA3MDYiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIn0.mJYtSMQLgEDlzpX7_WC5pAF8s2DENZB1IBv20R2kZ8s",
"token_type": "bearer",
"id_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICItMXF4RW9NTU1ON29NM2NrZUhPaEowaFVZVGxQNThfMDNwMDYzV1hIVzQwIn0.eyJleHAiOjE2MDI2NTQ1NzMsImlhdCI6MTYwMjY1NDI3MywiYXV0aF90aW1lIjowLCJqdGkiOiJmN2VjYjJlNi1mYmRlLTQ2ZjItOWE1Mi00YTEyMjlkYzQ5YjIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMveGpqZG9nIiwiYXVkIjoieGpqZGVtbyIsInN1YiI6ImNhZDc2M2IxLTU5ODctNDNhMi04ZDgwLTJkNWU4NjVkYjcxNiIsInR5cCI6IklEIiwiYXpwIjoieGpqZGVtbyIsInNlc3Npb25fc3RhdGUiOiJkMTFkMzljNi0wYTMyLTQzZWItYmEyMi04NTM3ZWVhODA3MDYiLCJhdF9oYXNoIjoiM1h0eEhqTUQ5Q3FNdEwxcWFxTlFfZyIsImFjciI6IjEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6InhqamRvZzAifQ.EvUbCmrylfwFL0rhyX36nnxFNRTvtYZAkPYtLv6r8CCbolRHwNJDJflu44BpLQBJGD4UNFkvfsz1BmU-mAw5soxS7eaupOm8LGkUm_qmgj-qtH0eGRi4FlUq4Tw3gx4lGoyR1zNlt1dkcAhjNtyXkhZWjcjDownLgFajNrUCOUiFw1XZwBDPlyy5AQ8d1Kkc5RIF6zhy4bkXKp_fakTNWJPr2-C1xYcEssGOv81FVUajszmItnWP4SnJvzER_njpmnjg_b1lPMng-zMx-R7zgQrx06JStO0IKUd8hXSSmudpw652whR31cCWbTBhfNB2RH_Rnfrau2047WZ36I8zmg",
"not-before-policy": 0,
"session_state": "d11d39c6-0a32-43eb-ba22-8537eea80706",
"scope": "openid email profile"
}
access_token
иid_token
более знакомый, он использует.
разделить на три части, кажетсяJWT
Формат.
Я воспользовался инструментом, чтобы расшифровать его, и увидел, что это так, поэтому мгновенно встал.
В области загрузки по-прежнему много контента, где вы можете увидеть информацию о пользователе. Такой вид передачи токенов по сети, безусловно, очень расточительный. Но в 21 веке это допустимо.
Информацию о пользователе можно проверить, запросив указанный ниже адрес.
curl -XPOST -d 'access_token={上面的token}' http://localhost:8080/auth/realms/xjjdog/protocol/openid-connect/userinfo
Вы получите следующие слова.
{
"sub": "cad763b1-5987-43a2-8d80-2d5e865db716",
"email_verified": false,
"preferred_username": "xjjdog0"
}
End
Как видите, keycloak использует无状态
Способ управления токенами основан на более продвинутомOAuth 2.0
иJSON Web Token(JWT)
разработан по спецификации. Для интернет-приложений, естественно, есть возможность горизонтального масштабирования.
Интеграция keycloak в SpringBoot очень проста, и у официалов есть такая демка. Разработка keycloak также очень активна, и основная ветка только что представила код. В общем, стоит попробовать!
Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус.