溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

發(fā)布時間:2020-08-24 19:49:42 來源:腳本之家 閱讀:591 作者:川川Jason 欄目:編程語言

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用戶:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

直接登錄Admin Console http://localhost:8080/auth/admin/ :

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

Realm

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

為保護(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:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能 Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

Login Tab中有多個可配置選項:用戶注冊、編輯用戶名、忘記密碼、記住我、驗(yàn)證email、使用email登錄、需要SSL。

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

其中,Require SSL有三個選項: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可以配置界面主題、啟用國際化:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

Tokens Tab可以配置token簽名算法、過期時間等。

Client

Client是realm中受信任的應(yīng)用。

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

創(chuàng)建realm后自動創(chuàng)建以下client:

account 賬戶管理

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

如Realm配置中啟用了User-Managed Access則可以管理自己的Resource: Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

admin-cli brokerrealm-management 預(yù)置了realm管理角色,創(chuàng)建realm管理員時需要分配這些角色security-admin-console realm管理控制臺

創(chuàng)建heroes client,點(diǎn)擊Clients右上方的Create:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能 Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

Client Protocol使用默認(rèn)值openid-connect。Access Type有三個選項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 : Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

Client Scope

Client Scope定義了協(xié)議映射關(guān)系,keycloak預(yù)定義了一些Scope,每個client會自動繼承,這樣就不必在client內(nèi)重復(fù)定義mapper了。Client Scope分為default和optional兩種, default scope會自動生效,optional scope指定使用時才生效。 Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

啟用optional scope需要使用scope參數(shù): Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

啟用相應(yīng)scope或配置mapper后,才能在client的token或userinfo中顯示相應(yīng)的屬性。比如,上圖中我們啟用了phone scope,phone mapper中定義了phone number: Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

如果用戶屬性中定義了phoneNumber,在token中則會顯示phone_number,可以在heroes client -> Client Scopes -> Evaluate查看效果:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

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可以撤銷:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能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管理用戶

添加用戶:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

授予realm-management權(quán)限:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能Authentication

Keycloak預(yù)定義了Browser、Direct Grant、Registration、Reset Credentials等認(rèn)證流程,用戶也可以自定義。以Brower流程為例:

Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能

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

總結(jié)

以上所述是小編給大家介紹的Spring Boot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

向AI問一下細(xì)節(jié)

免責(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)容。

AI