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

Keycloak

定制網(wǎng)站制作可以根據(jù)自己的需求進(jìn)行定制,成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)的運(yùn)用實(shí)際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實(shí)際意義

Keycloak為現(xiàn)代應(yīng)用和服務(wù)提供開源的認(rèn)證和訪問管理,即通常所說的認(rèn)證和授權(quán)。Keycloak支持OpenID、OAuth 2.0和SAML 2.0協(xié)議;支持用戶注冊(cè)、用戶管理、權(quán)限管理;支持代理OpenID、SAML 2.0 IDP,支持GitHub、LinkedIn等第三方登錄,支持整合LDAP和Active Directory;支持自定義認(rèn)證流程、自定義用戶界面,支持國際化。

Keycloak支持Java、C#、Python、Android、iOS、JavaScript、Nodejs等平臺(tái)或語言,提供簡單易用的Adapter,僅需少量配置和代碼即可實(shí)現(xiàn)SSO。

Keycloak新的發(fā)行版命名為Quarkus,專為GraalVM和OpenJDK HotSpot量身定制的一個(gè)Kurbernetes Native Java框架,計(jì)劃2019年底正式發(fā)布。

安裝

Keycloak構(gòu)建在WildFly application server之上,從官網(wǎng)下載Standalone server distribution解壓后運(yùn)行bin/standalone.sh即可啟動(dòng)。默認(rèn)使用h3數(shù)據(jù)庫,可以修改配置使用其它數(shù)據(jù)庫。Standalone Clustered Mode、Domain Clustered Mode啟動(dòng)模式和更多配置請(qǐng)參閱官方文檔。

默認(rèn),本地網(wǎng)址為http://localhost:8080/auth ,首次登錄時(shí)必須創(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是最高級(jí)別的Realm。Master Realm內(nèi)的admin用戶(授予admin角色的用戶)擁有查看和管理任何其它realm的權(quán)限。因此,不推薦使用master realm管理用戶和應(yīng)用,而應(yīng)僅供超級(jí)管理員來創(chuàng)建和管理realm。每個(gè)realm有專用的管理控制臺(tái),可以設(shè)置自已的管理員賬號(hào),比如接下來我們創(chuàng)建的heroes realm,控制臺(tái)網(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中有多個(gè)可配置選項(xiàng):用戶注冊(cè)、編輯用戶名、忘記密碼、記住我、驗(yàn)證email、使用email登錄、需要SSL。

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

其中,Require SSL有三個(gè)選項(xiàng):all requests、external requests、none,默認(rèn)為external requests,在生產(chǎn)環(huán)境中應(yīng)配置為all requests。

all requests 所有請(qǐng)求都需通過HTTPS訪問external requests localhost和私有IP不需通過HTTPS訪問none 任何客戶端都不需HTTPS

Themes Tab可以配置界面主題、啟用國際化:

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

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

Client

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

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

創(chuàng)建realm后自動(dòng)創(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管理員時(shí)需要分配這些角色security-admin-console realm管理控制臺(tái)

創(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有三個(gè)選項(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)證用戶后附加一次性、臨時(shí)的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請(qǐng)求,響應(yīng)結(jié)果包含access和refresh token

調(diào)用示例,請(qǐng)求地址: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,每個(gè)client會(huì)自動(dòng)繼承,這樣就不必在client內(nèi)重復(fù)定義mapper了。Client Scope分為default和optional兩種, default scope會(huì)自動(dòng)生效,optional scope指定使用時(shí)才生效。 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中則會(huì)顯示phone_number,可以在heroes client -> Client Scopes -> Evaluate查看效果:

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

Role、Group、User

Role

Role分為兩種級(jí)別: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不會(huì)過期,但需每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可以屬于一個(gè)或多個(gè)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í)行一個(gè),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)登錄功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

網(wǎng)頁題目:SpringBoot/Angular整合Keycloak實(shí)現(xiàn)單點(diǎn)登錄功能
URL地址:http://muchs.cn/article16/ihisdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化做網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司