於瀏覽器存取資源時,輸入要獲取資源的URL後,Keycloak會自動轉導至登入頁面,輸入帳號密碼後即可在此瀏覽器存取有權限訪問的URL。(產生session及cookie)
在瀏覽器輸入欲訪問的URL ( http://localhost:8081/fhir/Observation )
瀏覽器會自動跳轉到Keycloak登入頁面
輸入帳號密碼後登入,若是擁有此URL讀取權限的帳號密碼即可獲得資源。
於Postman測試存取資源時,需要先取得access_token,在訪問目標URL時將access_token放在Header後送出request,即可取得資源。
在Header參數新增 ” Authorization ”,在access_token前加上 ” bearer空格 ”後送出request,即可取得URL資源。
( 註: Authorization參數的格式為 ” bearer ${ access_token } ” )
Postman可以使用Postman自帶的Auth工具透過GET方法取得access_token,如下圖
按下 " Get New Access Token " 後即可取得access_token及其他數據。
Tips:
密碼不能為Temporary On的狀態。
如上所述,取得access_token後即可請求目標URL。
除了使用瀏覽器或Postman進行存取外,也能透過curl的方式存取資源,方便執行自動化腳本。與使用Postman存取資源時相同,需要先取得access_token,在訪問目標URL時將access_token放在Header後送出request,即可取得資源。
以curl方式取得資源
指令 :
curl -H "Authorization: Bearer ${access_token}" ${目標URL}
範例 :
curl -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJHd2xlTjNtbEU0Y3NDNXdVSElxU2tPOHVkbGgtem1QNlFaaHlLRXkxNUxFIn0.eyJleHAiOjE3Mjc2MDU0ODcsImlhdCI6MTcyNzYwNTE4NywianRpIjoiZTg1ZThkNDQtMTYzMC00N2IxLThmM2ItYTkxM2UzNmJmNDNjIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImQ0NzAxMDRmLTFjNWItNDQ3ZC04MjYwLTc5ZWNjNTQ4MmI1MiIsInR5cCI6IkJlYXJlciIsImF6cCI6ImNsaWVudDAxIiwic2Vzc2lvbl9zdGF0ZSI6IjQyNTE1ODMyLWFhZTEtNDVjOS05NmExLTIyNjU1OGQxZTdhNSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDgxIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJ1c2VyLXJvbGUiLCJkZWZhdWx0LXJvbGVzLXRlc3QiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwic2lkIjoiNDI1MTU4MzItYWFlMS00NWM5LTk2YTEtMjI2NTU4ZDFlN2E1IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ1c2VyIiwiZ2l2ZW5fbmFtZSI6IiIsImZhbWlseV9uYW1lIjoiIn0.K_se-uyzCkH9S_iN9E2jt5fdzC_TbphMOK-p81V_rxLTpVSnJG0Cdv8xaCPCc7p1Qb96ARdW7HWQyCXquFhHr8cTOCRAErPtlAC7-o0N2ZlU9WslBZCk_dAFWijVogj85vurkm50Dy0Wpa4bexmYpg6Pi9gk_aWA_1PEq88fwv4J4dFlVhWiI0Ph_PjKVKU1ymix9eemdjBfbPXDXc_EDHlVLpidLjvfTe2ZCSC7mwAWHM8ZU3-W3DHJPfwdqsZp3fkizs1NB1rXfx8oH94ctd127lNvlq-BqCTctG_QKTeQ_YTB_iSDyNbl9GcuqH2UojE5aNQUpspmnb2VrPf5fg" http://localhost:8081/fhir/Observation/
以curl方式取得access_token
指令 :
curl -d "client_id=${client_id}&grant_type=password&username=${username}&password=${password}" -H "Content-Type: application/x-www-form-urlencoded" -X POST ${Keycloak服務IP}:${ Keycloak服務port }/realms/${client所在的目標realm}/protocol/openid-connect/token
範例 :
curl -d "client_id=client01&grant_type=password&username=user1&password=123" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:8080/realms/test/protocol/openid-connect/token
輸入指令後可以取得access_token、refresh_token等資源
2.使用refresh_token取得access_token
在使用密碼取得access_token時,回傳的資訊除了access_token外也會取得refresh_token。因為access_token是有時效性的,所以需要更新access_token。可以透過refresh_token重新取得access_token,避免重複輸入密碼。
一樣可透過Postman或curl更新access_token。
以Postman更新access_token的方式如下圖
輸入獲取access_token時取得的refresh_token,再次獲得access_token
以curl更新access_token的指令
指令 :
curl -d "client_id=${ client_id }&grant_type=refresh_token&refresh_token =${ refresh_token }" -H "Content-Type: application/x-www-form-urlencoded" -X POST ${Keycloak服務IP}:${ Keycloak服務port }/realms/${client所在的目標realm}/protocol/openid-connect/token
範例 :
curl -d "client_id=client01&grant_type=refresh_token&refresh_token=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiZmQyNTA3OC0xMmU5LTQwY2EtYTEwZi1iYjA5ZGVjMWVlZGMifQ.eyJleHAiOjE3Mjc2MDgyMTIsImlhdCI6MTcyNzYwNjQxMiwianRpIjoiNmI4ODIzZDgtODIwNC00YzAzLTllOWEtZGFhOTNjMzcwZjhiIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0IiwiYXVkIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3JlYWxtcy90ZXN0Iiwic3ViIjoiZDQ3MDEwNGYtMWM1Yi00NDdkLTgyNjAtNzllY2M1NDgyYjUyIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6ImNsaWVudDAxIiwic2Vzc2lvbl9zdGF0ZSI6IjljYjkxMzVjLTQ2MDYtNGE3MC1hYTIzLTJiNTcyMjgzZWQ3NiIsInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsInNpZCI6IjljYjkxMzVjLTQ2MDYtNGE3MC1hYTIzLTJiNTcyMjgzZWQ3NiJ9.Gku4DPcqZNm-nmOaYZZEbx5ZLihA7MZydPuZZKeUyfg
" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:8080/realms/test/protocol/openid-connect/token
在執行自動化腳本時,可以透過refresh_token持續更新access_token,不需重複輸入帳號密碼。
以上是簡單的Keycloak使用教學,希望對大家有幫助!