keycloak~三方社區(qū)登錄重點(diǎn)總結(jié)
三方社區(qū)BUG問(wèn)題
1.?登錄頁(yè)的社區(qū)登錄鏈接,只能點(diǎn)一次,如果在新窗口打開(kāi),點(diǎn)第二次時(shí)會(huì)出現(xiàn)會(huì)話過(guò)期問(wèn)題
三方社區(qū)登錄重點(diǎn)
??AbstractOAuth2IdentityProvider?負(fù)責(zé)與第三方對(duì)接,完成登錄
??AbstractIdpAuthenticator?如果在登錄過(guò)程中,檢測(cè)到了三方用戶ID(federatedidentity.federateduser_id)不存在,就會(huì)去AbstractIdpAuthenticator實(shí)現(xiàn)類IdpCarsiFirstFlowAuthenticator去做注冊(cè)
??CarsiConfig是個(gè)性化配置類,它集成了OAuth2IdentityProviderConfig配置類,添加了自己獨(dú)有的屬性?
??登錄成功后,如果是新用戶走FirstBrokerLogin的流程,在kc社區(qū)配置中進(jìn)行;如果是老用戶走finishBrokerAuthentication方法?
??社區(qū)登錄,可以通過(guò)在kc配置中,添加第一登錄流來(lái)添加新用戶的操作;也可以添加登錄后流程來(lái)添加老用戶登錄成功后的個(gè)性化操作
?

????


1.?使用第一登錄流IdpCarsiFirstFlowAuthenticator實(shí)現(xiàn)了新用戶的注冊(cè)邏輯,當(dāng)你的社區(qū)賬號(hào)沒(méi)有與kc賬號(hào)完成綁定之前,在社區(qū)登錄
后,它會(huì)先到這個(gè)第一登錄流的邏輯里。
2.?如果你的社區(qū)賬號(hào)已經(jīng)完成與KC的綁定,在登錄成功后,會(huì)走CarsiAfterAuthenticator,就是登錄后的邏輯,本例子中,在這里把用戶和組
綁定到了一起。
3.?當(dāng)?shù)卿洉r(shí),KC會(huì)向外部發(fā)布一些事件,如獲取token,登錄成功等事件,本例子中,我們?cè)讷@取完token之后,需要把用戶和組的關(guān)系解綁,所以
用到了CODE_TO_TOKEN事件,它會(huì)進(jìn)行刪除用戶和組關(guān)系的動(dòng)作。
4.?登錄事件LOGIN里,我們完成了用戶登錄方式的記錄,它被記錄到user_attribute里,通過(guò)loginType進(jìn)行標(biāo)識(shí)。
5.?對(duì)token進(jìn)行二次加工,需要重寫(xiě)AbstractOIDCProtocolMapper類,如果希望你添加的Mapper在其它Mapper后面執(zhí)行,需要重寫(xiě)order和getPriority方法。
6.?更新用戶擴(kuò)展屬性,當(dāng)新用戶登錄時(shí),通過(guò)CarsiAuthenticator.extractIdentityFromProfile方法進(jìn)行實(shí)現(xiàn);當(dāng)老用戶時(shí),通過(guò)CarsiAuthenticator.updateBrokeredUser方法來(lái)實(shí)現(xiàn)更新用戶信息