十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

超级详细的 Docker Desktop 安装 Keycloak

超级详细的 Docker Desktop 安装 Keycloak 一、Keycloak 简介收先先來看一下Keycloak的基本資訊:名稱: Keycloak開發使用的程式語言: Java公用: 單點登入驗證與授權工具許可協議: Apache License 2.0公開倉庫: https://github.com/keycloak/keycloak官方網站: https://www.keycloak.org撰寫當下最新版本: 15.0.2 (2021年8月20日)Keycloak是拿來做什麼的首先他是一個單點登入(Single Sign On, SSO)系統服務。換句話說如果「快速開始」所展示的他可以協助你驗證身份與管理會話(Session)。除此之外他可以嫁接許多現有的驗證系統支援LDAP、keyberos。此外支援多種社交登入(Social Login)。以及支援多個標準協議包含 OAuth 2.0 、 OpenID 和 saml 。 且支援授權服務。關於Keycloak起初會看到 Keycloak 是因爲當時在思考一個授權設計的相關軟體開發問題。然後授權又與驗證不是那麼容易分開來看。找著找著就發現Keycloak這蠻有去的玩具。雖然文件上有些過時但功能齊全、更新更讓我意外。2020年底、2021年初剛接觸時才12版一部分OAuth的Flow也沒有實現。半年才過去一些現在不但有了主板號更是直接跳到15版。2021年7月30 發佈 15.0.0 版2021年8月7日 發佈 15.0.1 版2021年8月20日 發佈 15.0.2 版一、安装DockerDocker Desktop 安装使用教程 点击查看二、安装 KeyCloak镜像地址 https://hub.docker.com/r/jboss/keycloak/1、安装 jboss/keycloak 镜像docker pull jboss/kaycloak2、启动 jboss/keycloak 镜像参考启动命令如下命令将启动一个新的容器需要启动已有的容器请使用docker start 《container_id》# jboss/keycloak docker run-p8082:8080-eKEYCLOAK_USERadmin-eKEYCLOAK_PASSWORDadmin jboss/keycloak ​ # quay.io/keycloak v19.0.1docker run-p9080:9080-p9443:9443-eKEYCLOAK_ADMINadmin-eKEYCLOAK_ADMIN_PASSWORDadmin-eKC_HTTP_PORT9080-eKC_HTTPS_PORT9443-d quay.io/keycloak/keycloak:19.0.1start-dev然后重新启动容器:docker restartCONTAINER三、使用 KeyCloak1、访问 jboss/keycloak1、ping通server ip2、browser访问: http://127.0.0.1:8082/3、初始用户名和密码都是admin启动时指定.2、使用 jboss/keycloak我们使用的时候需要创建一个realm创建realm简单设置一个名称即可。点击左上角的 Master在弹出下拉框中点击 Create Realm 按钮。2.1、Realm公开配置可以通过如下地址获取指定realm的openid配置注意keycloak:18.0.0之前的版本url 需要添加 auth 路径# kc18.0.0${KC_ADDR}/realms/${KC_REALM}/.well-known/openid-configuration # before kc18.0.0${KC_ADDR}/auth/realms/${KC_REALM}/.well-known/openid-configurationExamplehttp://127.0.0.1:8082/realms/MVNO/.well-known/openid-configuration返回一个json数据包括grant_types_supported等2.2、Create Client创建 Realm之后最重要的就是创建 Client 不同类型的Client对 OAuth Grant Flow 支持有所差异。主要配置和 Client Type 和 Client ID前者决定授权方式后者是后端程序配置连接地址时要配置。在左侧菜单栏中选择Clients 选项卡。然后点击右侧的添加按钮。输入客户端名称然后点击保存。然后在添加成功后的跳转到的页面找到Valid Redirect URIs 在这里将配置我们的spring boot 应用的网址。在本示例中spring boot应用将会跑在8081端口上。所以地址应设置为http://localhost:8081。随后保存。Client authentication: 如果打开则client的access type为credentials那么连接此client需要 client-secret参数否则access type为public不需要client-secret。不同access type的client支持的Authentication flow有些差异。Authentication flowStandard flow oauth2 的 Authorization Code Flow。Direct access grant oauth2的 Password Flow。…创建client之后需要配置一些参数如“Valid redirect URIs ”等参数。如果使用基于重定向的 Authentication flowkeycloak接收到redirect_uri参数时检测其是否与当前client配置的 Valid redirect_uri 一致。不符合则会提示Client secretAdvanced TAB如配置access_token 存活时长等2.3、Create Roles在左侧菜单栏中选择Roles 选项卡。然后点击右侧的添加按钮。输入用户名然后保存。Create User登录的用户来自这里如果有额外的用户数据数据库可以配置 User federation 。注意需要登录的用户需先在数据库中配置角色前端无角色会报错。创建用户1、 在左侧菜单栏中选择Users 选项卡。然后点击右侧的添加按钮。2、输入用户名添加用户3、添加成功后单击Credentials 选项卡设置登录密码。4、添加成功后单击Role Mappings 选项卡给用户设置角色。5、开启用户注册可选在左侧菜单栏中选择Realm Settings 选项卡。然后按照如图所示进行操作。这样在KeyCloak的登录页面就会增加注册按钮。四、Springboot 整合 KeyCloak1、创建一个Spring Boot 应用添加以下依赖dependencyManagementdependenciesdependencygroupIdorg.keycloak.bom/groupIdartifactIdkeycloak-adapter-bom/artifactIdversion17.0.1/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-security/artifactId/dependencydependencygroupIdorg.keycloak/groupIdartifactIdkeycloak-spring-boot-starter/artifactIdversion17.0.1/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies2、ControllerControllerpublicclassMyController{GetMapping(/customers/he)ResponseBodypublicMaphe(Principalprincipal){MapString,StringmapnewHashMap();map.put(username,principal.getName());returnmap;}}3、SecurityConfigKeycloakConfigurationpublicclassSecurityConfigextendsKeycloakWebSecurityConfigurerAdapter{AutowiredpublicvoidconfigureGlobal(AuthenticationManagerBuilderauth)throwsException{KeycloakAuthenticationProviderkeycloakAuthenticationProviderkeycloakAuthenticationProvider();keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(newSimpleAuthorityMapper());auth.authenticationProvider(keycloakAuthenticationProvider);}BeanOverrideprotectedSessionAuthenticationStrategysessionAuthenticationStrategy(){returnnewRegisterSessionAuthenticationStrategy(newSessionRegistryImpl());}Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{super.configure(http);http.authorizeRequests()//注意这句 这个user角色是我们在Keycloak中创建并分配给用户的, 只有用户拥有该role时用户才能访问对应的资源.antMatchers(/customers/*).hasRole(user).anyRequest().permitAll();}4、KeycloakConfigConfigurationpublicclassKeycloakConfig{BeanpublicKeycloakSpringBootConfigResolverkeycloakConfigResolver(){returnnewKeycloakSpringBootConfigResolver();}}5、application.ymlserver:port:8081#与keycloak中配置的一致 keycloak:auth-server-url:http://localhost:8080#KeyCloak地址 realm:MyRealm#realm名称 resource:spring-app #client名称public-client:trueprincipal-attribute:preferred_username ssl-required:external
返回列表