您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何使用SpringBoot/Angular整合Keycloak實現單點登錄功能的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Keycloak
Keycloak為現代應用和服務提供開源的認證和訪問管理,即通常所說的認證和授權。Keycloak支持OpenID、OAuth 2.0和SAML 2.0協議;支持用戶注冊、用戶管理、權限管理;支持代理OpenID、SAML 2.0 IDP,支持GitHub、LinkedIn等第三方登錄,支持整合LDAP和Active Directory;支持自定義認證流程、自定義用戶界面,支持國際化。
Keycloak支持Java、C#、Python、Android、iOS、JavaScript、Nodejs等平臺或語言,提供簡單易用的Adapter,僅需少量配置和代碼即可實現SSO。
Keycloak新的發行版命名為Quarkus,專為GraalVM和OpenJDK HotSpot量身定制的一個Kurbernetes Native Java框架,計劃2019年底正式發布。
安裝
Keycloak構建在WildFly application server之上,從官網下載Standalone server distribution解壓后運行bin/standalone.sh即可啟動。默認使用h3數據庫,可以修改配置使用其它數據庫。Standalone Clustered Mode、Domain Clustered Mode啟動模式和更多配置請參閱官方文檔。
默認,本地網址為http://localhost:8080/auth ,首次登錄時必須創建admin用戶:
直接登錄Admin Console http://localhost:8080/auth/admin/ :
Realm
為保護不同的應用,通常創建不同的Realm,各Realm間的數據和配置是獨立的。初始創建的Realm為Master,Master是最高級別的Realm。Master Realm內的admin用戶(授予admin角色的用戶)擁有查看和管理任何其它realm的權限。因此,不推薦使用master realm管理用戶和應用,而應僅供超級管理員來創建和管理realm。每個realm有專用的管理控制臺,可以設置自已的管理員賬號,比如接下來我們創建的heroes realm,控制臺網址為http://localhost:8080/auth/admin/heroes/console 。創建Heroes realm,點擊左上角下拉菜單-》Add realm:
Login Tab中有多個可配置選項:用戶注冊、編輯用戶名、忘記密碼、記住我、驗證email、使用email登錄、需要SSL。
其中,Require SSL有三個選項:all requests、external requests、none,默認為external requests,在生產環境中應配置為all requests。
all requests 所有請求都需通過HTTPS訪問external requests localhost和私有IP不需通過HTTPS訪問none 任何客戶端都不需HTTPS
Themes Tab可以配置界面主題、啟用國際化:
Tokens Tab可以配置token簽名算法、過期時間等。
Client
Client是realm中受信任的應用。
創建realm后自動創建以下client:
account 賬戶管理
如Realm配置中啟用了User-Managed Access則可以管理自己的Resource:
admin-cli brokerrealm-management 預置了realm管理角色,創建realm管理員時需要分配這些角色security-admin-console realm管理控制臺
創建heroes client,點擊Clients右上方的Create:
Client Protocol使用默認值openid-connect。Access Type有三個選項confidential、public、bearer-only,保持默認值public。confidential需要client secret,但我們將在web應用中使用此client,無法以安全的方式傳輸secret,必須使用public client,只要嚴格使用HTTPS,可以保證安全。Valid Redirect URIs輸入 http://localhost:4200/* 。
認證流程:
Standard Flow 即OAuth 2.0規范中的Authorization Code Flow,推薦使用的認證流程,安全性高。keycloak驗證用戶后附加一次性、臨時的Authorization Code重定向到瀏覽器,瀏覽器憑此Code與keycloak交換token(identity、access和refresh token) Implicit Flow keycloak驗證用戶后直接返回identity和access token Direct Access Grants REST client獲取token的方式,使用HTTP Post請求,響應結果包含access和refresh token
調用示例,請求地址:http://localhost:8080/auth/realms/heroes/protocol/openid-connect/token :
Client Scope
Client Scope定義了協議映射關系,keycloak預定義了一些Scope,每個client會自動繼承,這樣就不必在client內重復定義mapper了。Client Scope分為default和optional兩種, default scope會自動生效,optional scope指定使用時才生效。
啟用optional scope需要使用scope參數:
啟用相應scope或配置mapper后,才能在client的token或userinfo中顯示相應的屬性。比如,上圖中我們啟用了phone scope,phone mapper中定義了phone number:
如果用戶屬性中定義了phoneNumber,在token中則會顯示phone_number,可以在heroes client -> Client Scopes -> Evaluate查看效果:
Role、Group、User
Role
Role分為兩種級別:Realm、Client,默認Realm Role:offline_access、uma_authorization。
offline access
OpenID規范中定義了offline access,用戶登錄獲得offline token,當用戶退出后offline token仍可使用。在很多場景中是非常有用的,比如每日離線備份數據。要獲得offline token除需offline_access角色外,還需指定offline_access Scope。默認,offline token不會過期,但需每30天刷新一次。offline token可以撤銷:
uma_authorization
uma是User-Managed Access的縮寫,Keycloak是符合UMA 2.0功能的授權服務器。
Role、Group和User的關系
User可以屬于一個或多個Group,Role可以授予User和Group。
創建Realm管理用戶
添加用戶:
授予realm-management權限:
Authentication
Keycloak預定義了Browser、Direct Grant、Registration、Reset Credentials等認證流程,用戶也可以自定義。以Brower流程為例:
Required是必須執行的,Alternative至少須執行一個,Optional則由用戶自己決定是否啟用。
Identity ProviderADFSSalesforceSpring BootAngular參考文檔
Keycloak A Quick Guide to Using Keycloak with Spring Boot AD FS Docs Spring Boot and OAuth3 OAuth 2.0 Login Sample Spring Boot and OAuth3 with Keycloak Spring SAML Springboot Oauth3 Server 搭建Oauth3認證服務 How to Setup MS AD FS 3.0 as Brokered Identity Provider in Keycloak
感謝各位的閱讀!關于“如何使用SpringBoot/Angular整合Keycloak實現單點登錄功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。