簡體   English   中英

使用 mod_auth_openidc 和 keycloak 進行 cURL 身份驗證

[英]cURL authentication with mod_auth_openidc and keycloak

我有一個運行 Keycloak 的身份驗證服務器和一個帶有 mod_auth_openidc 的 Apache2 網絡服務器來執行 OAuth2 授權。

使用瀏覽器,我可以成功攔截對受保護資源的訪問,以將用戶重定向到 Keycloak 登錄頁面。 登錄成功后,用戶將被重定向到資源鏈接。

使用 Postman,我還可以使用密碼授予流程檢索訪問令牌 JWT,然后使用訪問令牌訪問受保護的資源。 postman 提供的 cURL 代碼表明還需要 mod_auth_openidc_session cookie。

接下來,我嘗試在 Linux CLI 中執行 2-stage cURL 命令。

首先,我使用密碼授予流程檢索訪問令牌,如下所示。 我啟動了 cookie 引擎來捕獲 mod_auth_openidc 給出的會話 cookie。

# RETRIEVE ACCESS TOKEN JSON
curl -L -b ./cookie.jar -c ./cookie.jar -d 'client_id=CLIENT_ID' -d 'client_secret=368127b1-1ee0-4f3f-8429-29e9a93daf9a' -d 'username=USERNAME' -d 'password=PASSWORD' -d 'grant_type=password' 'https://AUTH_SERVER:PORT/auth/realms/REALM/protocol/openid-connect/token

# PARSE ACCESS TOKEN
access_token=`echo $response|jq '.access_token'|cut -d\" -f2`

接下來,使用標頭和 cookie jar 文件中的訪問令牌承載,我嘗試訪問受保護的資源。

curl -b ./cookie.jar -c ./cookie.jar --insecure -L -X GET 'https://RESOURCE_SERVER:PORT/protected_content' --header "'Authorization: Bearer "$access_token"'"

但是,我仍然被重定向到 Keycloak 登錄頁面,並且會話 cookie 沒有記錄在 cookie jar 文件中。

這是記錄的 cookie jar 文件,其中敏感信息已編輯/替換。

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

#HttpOnly_[AUTH_SERVER]     FALSE   /auth/realms/master/    TRUE    0       KC_RESTART      eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI2Y2ZiNjYwOC1kMTlhLTQwZGUtOWJiYS04NzcxOTkzZTIwMWUifQ.eyJjaWQi[REDACTED]4aHhkVDBGZmhBZEVTSm8iLCJub25jZSI6IndTYXNYOWhGeGIxd1hKakNrS2FLMXVadVRGX3ZOZzRGVUZnMTJyYXFWbVkifX0.53645krpwlFnJ09cHAcZhNCci-DhGigu4soN5CVsZQ0
#HttpOnly_[AUTH_SERVER]     FALSE   /auth/realms/master/    TRUE    0       AUTH_SESSION_ID_LEGACY  6a23b139-05ba-4d22-b9e3-9ae857074814.[AUTH_SERVER]
#HttpOnly_[AUTH_SERVER]     FALSE   /auth/realms/master/    TRUE    0       AUTH_SESSION_ID 6a23b139-05ba-4d22-b9e3-9ae857074814.[AUTH_SERVER]
#HttpOnly_[RESOURCE_SERVER]     FALSE   /       TRUE    0       mod_auth_openidc_state_XGEq0YKJAwSt8hxdT0FfhAdESJo      NVc9Mk1FmN[REDACTED]lydKVtOw0iL-Y9iZMjzcUinutFPn74rmVvI_ERV3C8Wn1Euio8pID0jEAmu9NEfY_MEeuzOzqe6w7I20HZUNQHX0uh_vXR8

誰能告訴我在 2 階段 cURL 身份驗證/授權過程中我做錯了什么?

設置Authorization標頭時,雙引號內有單引號。 這意味着而不是期望Authorization: Bearer token服務器正在獲取'Authorization: Bearer token' 您可以使用詳細-v選項檢查標題的內容。

以下命令應按預期工作:

curl --header "Authorization: Bearer $access_token" -b ./cookie.jar -c ./cookie.jar --insecure -L -X GET https://RESOURCE_SERVER:PORT/protected_content' 

或者,如果您需要圍繞令牌使用雙引號,請使用以下內容:

--header "Authorization: Bearer \"$access_token\""

旁注:為了不覆蓋cookie.jar現有的 cookie,請使用不同的文件名來存儲從請求到授權文件的 cookie。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM