中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

keycloak~關于跨域的(de)(de)iframe對接(jie)keycloak的(de)(de)分析

幾個cookie下面元素

  • AUTH_SESSION_ID 會話級的session_state
  • AUTH_SESSION_ID_LEGACY 在http中可見的AUTH_SESSION_ID
  • KEYCLOAK_SESSION 帶有效期的session_state
  • KEYCLOAK_SESSION_LEGACY 在http中可見的KEYCLOAK_SESSION
  • KEYCLOAK_IDENTITY 用戶完成認證后,在cookie記錄用戶和session_state的jwt token
  • KEYCLOAK_IDENTITY_LEGACY 在http中可見的KEYCLOAK_IDENTITY

不同頂級域名對接keycloak后auth_session_id被cookie Partition隔離

圖片

登錄的過程

以社(she)區登(deng)(deng)(deng)錄為例,對接社(she)區如微(wei)信登(deng)(deng)(deng)錄后,在(zai)keycloak登(deng)(deng)(deng)錄頁點微(wei)信按鈕(niu),

  1. 登錄頁面 /auth/realms/demo/protocol/openid-connect/auth
  2. 驗證參數,完成到社區網站的302跳轉 /auth/realms/{realm}/broker/weixin/login?client_id=democlient&tab_id=rzukcX7mOfQ&session_code=OPsAHAZ3HZISaxklQLmcVYJThVUwLh5Y8TkAi5GQPjY
  3. 在社區網站上完成登錄,由社區302跳轉回keycloak頁面
  4. 如果社區帳號沒有綁定keycloak用戶,進入first-broker-login頁面,完成用戶的綁定 /auth/realms/demo/login-actions/first-broker-login?client_id=democlient&tab_id=JCCx2WFmFFA
  5. 在first-broker-login填寫信息提交后,完成綁定,302到post-broker-login頁面 /auth/realms/demo/login-actions/post-broker-login?client_id=democlient&tab_id=dBh9Jl7qib4
  6. post-broker-login流程處理完成后,302到after-post-broker-login頁面,/auth/realms/demo/broker/after-post-broker-login?session_code=QM5PnTZihZqnVsyCilwJhxLY5viLoCgckPLHF_NkBuA&client_id=democlient&tab_id=dBh9Jl7qib4
  7. 這樣就完成了keycloak的登錄,然后302跳轉到redirect_uri頁面,登錄結束

跨域iframe登錄出現問題的點

  1. 打開登錄頁后,生成auth_session_id這個鍵,并添加了當前域名的頂級域名做為cookie的Partition Key
  2. 點擊社區登錄后,kc服務端進入如下方法
  • org.keycloak.services.resources.IdentityBrokerService.performLogin()
    • org.keycloak.services.resources.IdentityBrokerService.parseSessionCode()
      • org.keycloak.services.resources.SessionCodeChecks.initialVerify()
  1. 經過sessionCode初始檢查之后,在執行到parseSessionCode()方法中代碼AuthenticationSessionModel authSession = checks.getAuthenticationSession();時,authSession的結果為空,故出現無法登錄異常,如下代碼
ERROR [org.keycloak.services.resources.IdentityBrokerService] (default task-1708) unexpectedErrorHandlingRequestMessage: javax.ws.rs.WebApplicationException: HTTP 400 Bad Request
	at org.keycloak.keycloak-services@14.0.0//org.keycloak.services.resources.IdentityBrokerService.parseSessionCode(IdentityBrokerService.java:1225)
	at org.keycloak.keycloak-services@14.0.0//org.keycloak.services.resources.IdentityBrokerService.performLogin(IdentityBrokerService.java:419)

跨域后的異常

  1. 有同域的auth_session_id的情況下(已在cookie partitioned為空的網站登錄,與kc認證服務同一頂級域名),在跨域頁面登錄,請求是http 302跳到新登錄頁,顯示登錄超時(或者強制跳到已登錄頁面),原因是kc服務端獲取的auth_session_id與當前頁面傳遞的tab_id和session_code不匹配
    圖片

  2. 在沒有其它auth_session_id的情況下,在跨域頁面登錄,顯示錯誤頁,http 400錯誤,原因是kc服務端在無法獲取cookie中帶分區的auth_session_id
    圖片

  3. keycloak使(shi)用(yong)了會話(hua)保持功(gong)能(neng),我(wo)們使(shi)用(yong)更穩定的ingress在(zai)瀏覽器添加cookie的方式,當在(zai)社區超(chao)鏈登(deng)錄時(shi),它的a標簽里target屬性(xing)為_parent或者_top,這樣鏈接發(fa)送的cookie是(shi)cookie partitioned為空的網站route(狀態保持自(zi)動生(sheng)成(cheng)),這時(shi)會出(chu)現(xian)請求的kc節(jie)點與提交的kc節(jie)點不同的情(qing)況,也會出(chu)現(xian)400的錯(cuo)誤

解決iframe跨域問題的關鍵

  1. 表單提交登錄,可以適應跨頂域的情況
  2. 社區a標簽超鏈登錄,如果target=_self,也可以適應跨頂域的情況,其它target屬性,不適合
  3. 建議統一登錄不使用iframe進行嵌入
posted @ 2025-11-04 08:38  張占嶺  閱讀(19)  評論(0)    收藏  舉報