使用 Mechanize ruby gem 建立 Session

最近有一個專案必須要去跟為數眾多的 Jamf Pro 伺服器進行 API 溝通。因為 Jamf Cloud 有 Load Balancer 的機制在前面,所以每次 API Request 過去時,Load Balancer 可能會指引到不同的 Web Apps。

最近有一個專案必須要去跟為數眾多的 Jamf Pro 伺服器進行 API 溝通。因為 Jamf Cloud 有 Load Balancer 的機制在前面,所以每次 API Request 過去時,Load Balancer 可能會指引到不同的 Web Apps。

本來這是一個很好的機制,確保服務品質,但由於 Jamf Cloud 伺服器在剛初始的時候,API Call 可能會被引導到還沒有初始化的 Web App 裡,就會發生 503 錯誤。但如果今天不是用 API 互動,就完全不會有這個問題,因為瀏覽器會去處理 Session 的問題,讓使用者可以維持和同一個 Web App 通訊。

在 Python 裡面有一個 requests 庫,可以使用 reqeusts.Session 起一個新的會話,就像是模擬使用者在使用服務的感覺一樣,在 Ruby 也找到一個類似的 Gem 叫做 Mechanize。

安裝方法可參考:https://github.com/sparklemotion/mechanize

但為了方便管理,我在系統上面裝了 RVM 跟 Bundler,特別的針對目前手上進行的專案做了一個 Gemfile,然後寫下:gem "mechanize"

使用方法也蠻簡單的,只要先初始化一個類似 Singleton 的物件,設定 Global Variable 也可以。http = Mechanize.new

GET 請求uri = "https://some-hostname.com"headers = {
       "Authorization" => "Bearer Token",
       "Accept" => "application/json"
}response = http.get(uri,nil,nil,headers)if response.code == "200"
  //handle the response
end

錯誤處理

如果發生 HTTP Error 的時候,可以用 Mechanize::ResponseCodeError 捕抓並處理rescue Mechanize::ResponseCodeError => e       case e.response_code       when "401"handle_401()       when "403"handle_403()       when "404"handle_404()       elsehandle_non200()end

POST 請求

跟 GET 幾乎一樣,只是請求時改成:http.post(uri,{},headers)

Read more

Apple 生態系的真實威脅—我們都可能是目標

Apple 生態系的真實威脅—我們都可能是目標

從一場分享開始的警醒 前陣子在 Jamf Nation Live Taipei 分享了 2024-2025 年 Apple 裝置威脅報告,深入探討了全球 Apple 生態系正面臨的資訊安全威脅。 許多人對 Apple 產品有一種根深蒂固的信心—拿著 Mac 或 iPhone,就像拿到了數位世界的「免死金牌」。說實話,Apple 在軟硬體整合上的安全設計確實領先業界,這不是誇大其詞。但也正因為這份信心,我開始想更深入地了解真實情況。 從 Jamf Security 360 報告開始,我觀察了全球情報機構(如 Citizen Lab、Google TAG、Kaspersky)揭露的真實案例。那時我才意識到一個有點殘酷的事實,也正好對應了同事最常對我說的那句話:Apple 設備並非堅不可摧,使用者自身往往才是最大的弱點。 為什麼 Apple 用戶成了高價值目標

By Glee Tsai

從 Jamf Pro 自定義註冊畫面帶使用者資訊至 Jamf Connect 失敗的處理方式

Jamf Pro 在設定裡面的 Enrollment Customization,本來可以設定在使用者完成設備註冊的當下,同步把 SAML 裡的資訊帶給後面的 Jamf Connect Login,這樣就可以減少一步使用者還需要登入的步驟。但在撰文的當下,Jamf Pro 11.1 仍在這個功能上有問題,在跟 Jamf Support Team 了解後,大概能用一種 Workaround 來解決,只是要特別留意以下事情: 1. 在 Jamf Pro 裡的 Enrollment Customization 不要再打勾 Enable Jamf Pro to pass user information to Jamf Connect 了(因為勾了也沒有用) 2. 確保

By Glee Tsai

在 Apple 零接觸部署下僅允許某個群組啟動設備

在 Jamf Pro 有整合 Single Sign On 的情況下,可以前往 Settings > Enrollment Customization 設定僅允許一個群組中的成員啟用設備。如果這個成員沒有在這個群組裡面的話,就不能夠開箱設備。如果以 Entra ID 為例,需要把 Object ID 填在下方的欄位即可。 對照到我在 Entra ID 上的群組設置: 至於如果不是 Entra ID,而是其它的 SSO Provider 的話,最好可以用 SAML Tracer 這一套 Google Chrome 外掛去看一下自己的 SAML 文件是如何表達群組的,例如下圖能看到這個使用者屬於以下五個群組。 接著有另外一個很重要的事情要提醒,如果你要阻擋註冊的成員,可以登入到 Jamf Pro

By Glee Tsai

在 Conditional Access 條件下設置 Jamf Connect Login 的 MFA 挑戰

Mac 世界的零接觸話題,每年都可以有新的話題出現。圍繞著使用者體驗,讓用戶在拿到電腦的那一刻,就能自動化配置所有公司要求的設定,不需 IT 人員幫忙。這不僅是節省 IT 人員的時間而已,更是讓整個出機流程變得更為流暢。 除了軟體與設定可以全自動化部署以外,使用者帳號當然也可以自助化的設定在電腦裡,而且完全按照公司的規範。所以如果公司正在使用 Entra ID 這樣的目錄服務時,當然也可以把 Entra ID 上面的帳密同步化成電腦本機電腦上的帳密,減少人員帳密疲疺的風險。然而,要求更高等級的公司,可能會要求人員在登入 Entra ID 時必須通過兩階段驗證,而這可能就為同步密碼帶來挑戰。 以 Jamf Connect 來說,這一套軟體可以在 Mac 設備開箱時自動就安裝在電腦上,並且出現一個可客製化的登入視窗給用戶登入 Entra ID。剖析這套軟體,事實上是由兩個 OIDC 授權類別完成的,一個是 Authorization Code Grant,

By Glee Tsai