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