關閉iPhone照相功能, 使用 Jamf API 自動停用鏡頭
本文為 關閉照相功能, Jamf 幫助軍隊與科技業自動停用相機 的接續篇,會更實際的談談如何用 Jamf Pro API 自動 關閉iPhone照相功能。
在上一篇文章裡已經說明了實作理論,透過 Jamf Pro 的 API 讓人員在打卡或進入到特定地理位置時,自動關閉 iPhone 或 iPad 上的相機。當然,也適用於 macOS 上的相機就是了。
這個系列有兩篇,主要是講如何滿足自動關閉相機的需求,主要會用 Jamf Pro API 及 Swift 語法完成相關內容。
這一篇會著墨在程式碼的實作部分,因為 Jamf Pro 有 Smart Group 功能的關係,只要符合條件,就會自動掉入到相對應的智慧群組,強制關閉相機的設定就會自動打到這個群組裡的所有設備裡。當設備不符合條件時,就會自動被移出這個智慧型群組,也就自動 關閉iPhone照相功能 。
因為 Jamf Pro 有提供 Restful API 可供串接的好處,上文的功能建議實作在伺服器上。或是像這篇文章一樣,假設員工是用 iPad 進行打卡上班(無論形式是輸入工號、人臉辨識或是感應員工卡等),我們也可以把這個功能實作在 iPad 上。
參考上一篇文章,在 Jamf Pro 開立好延伸式屬性(Extension Attribute)後,我們可以利用 Jamf Pro 的 API 更新這項屬性就好。例如我在 Jamf Pro 上面開了一個延伸式屬性叫做 ShouldLockCamera
,接下來只要透過 Jamf Pro API 把這個屬性的內容從 false
改為 true
就能鎖相機。
從員工工號到找到設備
參考 Jamf Pro API 文件,可以找到跟使用者有關的 Jamf Pro API 為:
GET /users/name/{name}
不過需要先通過認證才能呼叫這個 API,Jamf Pro 接受 Basic Authentication 或 JWT 的方式呼叫。如果是 Basic Authentication 的話,要把帳號密碼組合成 的形式,並且將其使用 base64 雜湊過後使用。
假設帳號是 admin,密碼是 123456,就是要組合成 admin:123456
這樣的字串,並且用 base64 雜湊一下。在 macOS 裡面的終端機可以打以下指令,找到 base64 過後的值:
printf "admin:123456" | iconv -t ISO-8859-1 | base64 -i -
結合以上資訊,當要找到 glee 有哪些裝置在公司裡登記在案的話,就可以用這個 API 來找:
curl "https://你的 Jamf 網址/JSSResource/users/name/glee" \
-H 'Accept: application/json' \
-u '帳號:密碼'
因為是要寫在 iPad 上的打卡系統,所以用 Swift 寫的話,Request 大概會長這樣:
let urlString = "\(Jamf網址)/users/name/glee"
let url = URL(string: urlString)
var request = URLRequest(url: url!)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("Basic \(base64過後的帳密)", forHTTPHeaderField: "Authorization")
這個使用者的裝置可能會有多台,會在 mobile_devices
這個物件下被找到,底下是回傳的 JSON 型式,由此可知 Glee Tsai 有一台設備,在 Jamf Pro 裡面的管理 ID 是 2 號:
{
"user": {
"id": 1,
"name": "glee",
"full_name": "Glee Tsai",
"email": "",
"email_address": "",
"phone_number": "",
"position": "",
"managed_apple_id": "",
"enable_custom_photo_url": false,
"custom_photo_url": "",
"ldap_server": {
"id": -1,
"name": "None"
},
"extension_attributes": [],
"sites": [],
"links": {
"computers": [],
"peripherals": [],
"mobile_devices": [
{
"id": 2,
"name": "Glee's iPad"
}
],
"vpp_assignments": [],
"total_vpp_code_count": 0
},
"user_groups": {
"size": 0
}
}
}
更新裝置上的延伸式屬性資訊
既然知道這個裝置的管理編號是 2 號了,接下來使用 Jamf 的更新資訊 API 來把 shouldLockCamera
這個屬性改成 true。
PUT /mobiledevices/id/{id}
因為 Jamf Pro Classic API 僅接受用 XML 更新資料,如果用 Swift 寫 Request 的話大概會長這樣:
let urlString = "\(apiEndpoint)/mobiledevices/id/\(裝置管理編號)"
let url = URL(string: urlString)
var request = URLRequest(url: url!)
request.httpMethod = "PUT"
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.addValue("Basic \(base64後的帳密)", forHTTPHeaderField: "Authorization")
let bodyString = "<mobile_device><extension_attributes><extension_attribute><id>\(裝置管理編號)</id><name>延伸式屬性名稱</name><type>String</type> <multi_value>\(true或false二擇一)</multi_value><value>\(true或false二擇一)</value></extension_attribute></extension_attributes></mobile_device>"
request.httpBody = bodyString.data(using: .utf8, allowLossyConversion: true)
更新裝置上的延伸式屬性資訊
最後一步,回到 Jamf Pro 上新增一個 Configuration Profile 的 Restrictions,把相機關閉選項打勾,並且 Scope 到 shouldLockCamera 為 true 的智慧型群組。這樣就完成了。
範例程式碼可由此下載
https://github.com/gds21/LockCameraUsingJamfPro
下一步往哪裡走?
上面的文章可以幫助你自動 關閉iPhone照相功能 ,如果你看得到內文的程式碼,但其它地方都看不懂,有可能是你手上沒有 Jamf 的帳號、或是對 Jamf 的智慧型群組不太熟,請找到 Jamf 台灣 的原廠協助你吧,或是留言在下面。
1 Comment
關閉照相功能, Jamf 幫助軍隊與科技業自動停用相機 - 不在蘋果飛碟裡的傳教士 · 2020-09-13 at 13:39
[…] 第二篇:關閉iPhone照相功能, 使用 Jamf API 自動停用鏡頭 […]
Comments are closed.