Единый вход, не смотри на cas-server, так же можно выбрать keycloak

Архитектура внешний интерфейс

Не завидуйте мандаринкам или бессмертным, а корректируйте строчку кода долго. Оригинал: 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. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус.