通過調用MSGraph API續訂E5訂閱的工具
創建應用程序
有關更多信息,請參見註冊應用程序和配置權限。我們需要您應用程序的tenant id , client id和client secret才能訪問MSGRAPH API。
創建用戶秘密文件
將user-secret.json.example複製到user-secret.json ,根據需要進行編輯。您隨時可以添加更多憑據。
如果您想使用證書秘密,這更適合安全性,則可以編寫帶有通往證書文件的路徑的certificate鍵,而不是secret鍵。如果我們發現您設置certificate ,它將始終被secret使用。
如果您在創建應用程序並添加秘密後添加證書,則可以更改client_id ,因此請更新。
測試了該工具的PFX格式。但是,您只需要將公共密鑰零件(*。crt)上傳到Azure即可。
如果您的證書有密碼,則可以在用戶秘密文件中創建一個passwords :
{
"passwords" : {
"<sha512sum>" : " <password> "
}
} <sha512sum>是較低情況下證書文件的SHA512總和, <password>是其密碼,請秘密地保持配置,以避免有人使用您的證書而無需允許使用您的證書。
設定天需要謹慎,因為這意味著節目中的DayOfWeek ,請在此處檢查以找出其正確的價值。
提示
我們現在支持JSON,YAML和TOML格式,Althouth我們以JSON為例,您可以隨時使用其他格式。我們支持的格式甚至可以通過使用模塊來擴展
安裝.NET
有關更多信息,請參見此處,我們需要.NET 8及以後。
獲取程序
您可以下載或構建以獲取二進製文件。
運行程序
只需在二進製文件夾中運行./E5Renewer ,就需要參數。
這裡有支持的論點:
--systemd :如果在SystemD環境中運行,則大多數時候不需要它。--user-secret :用戶秘密文件的路徑。--token :訪問JSON API的字符串。--token-file :第一行用作令牌的文件。--listen-unix-socket-permission :UNIX域套接字文件的權限。我們將在端點上收聽http://127.0.0.1:5000 :5000默認情況下,這是ASP.NET Core的默認值。
ASP.NET核心支持--urls參數以設置自定義的收聽端點,例如--urls=http://127.0.0.1:5001或--urls=http://unix:/path/to/socket 。可以通過參數--listen-unix-socket-permission自定義Unix域插座文件的權限。
這些自定義的參數實際上是ASP.NET核心配置項,項目的名稱是參數的滴定酶。例如, --token將被映射到Token , --user-secret將映射到UserSecret交易,並且--listen-unix-socket-permission將映射到ListenUnixSocketPermission 。借助此轉換映射,您可以使用ASP.NET Core提供它們的方式,例如JSON配置,環境變量等。但是有一種特殊情況: --systemd應與Systemd=true一起提供,如果您不使用命令行參數為ASP.NET Core的配置,則需要一個值,我們為--systemd flag添加了特殊檢查。這些定制的論點沒有-s , -u類的簡短表格。
--user-secret需要通過任何方法提供使用ASP.NET核心配置值的方式,或者將被拋棄userSecret NullReferenceException
筆記
如果指定了--token和--token-file ,我們更喜歡--token 。如果您忘了設置它們,我們會使用隨機生成的值。在向程序發送任何請求並遇到身份驗證錯誤後,您可以在日誌輸出中找到它。
重要的
如果要設置UNIX套接字權限,則必須編寫其實際值代替八倍格式。例如,需要使用511代替777 。
運行dotnet publish -c Release ,您可以在E5Renewer/bin/Release/net8.0/publish中獲得二進製文件
使用curl或任何可以發送http請求的工具,將請求發送到http://127.0.0.1:5000或Unix套接字/path/to/socket等端點,每個請求都應在標頭Authorization: Bearer <auth_token> 。如果一切都很好,您將獲得JSON響應。如果是get請求,請在查詢param timestamp中發送Milisecond Timestamp,如果是郵政請求,請在JSON中將MiliseCond Timestamp發送帶有關鍵timestamp Milisecond Timestamp,然後將其轉換為字符串。在大多數情況下,我們將返回JSON而不是純文本,但是您需要檢查響應代碼以查看請求是否成功。如果您使用的是HTTPS,則只需發送HTTPS請求即可。
例如:
curl -H 'Authorization: Bearer <auth_token>' -H 'Accept: application/json'
'http://127.0.0.1:5000/v1/list_apis?timestamp=<timestamp>' | jq '.'
{
"method": "list_apis",
"args": {},
"result": [
"AgreementAcceptances.Get",
"Admin.Get",
"Agreements.Get",
"AppCatalogs.Get",
"ApplicationTemplates.Get",
"Applications.Get",
"AuditLogs.Get",
"AuthenticationMethodConfigurations.Get",
"AuthenticationMethodsPolicy.Get",
"CertificateBasedAuthConfiguration.Get",
"Chats.Get", "Communications.Get",
"Compliance.Get",
"Connections.Get",
"Contacts.Get",
"DataPolicyOperations.Get",
"DeviceAppManagement.Get",
"DeviceManagement.Get",
"Devices.Get",
"Direcory.Get",
"DirectoryObjects.Get",
"DirectoryRoleTemplates.Get",
"DirectoryRoles.Get",
"DomainDnsRecords.Get",
"Domains.Get",
"Drives.Get",
"Education.Get",
"EmployeeExperience.Get",
"External.Get",
"FilterOperators.Get",
"Functions.Get",
"GroupLifecyclePolicies.Get",
"GroupSettingTemplates.Get",
"GroupSetings.Get",
"Groups.Get",
"Identity.Get",
"IdentityGovernance.Get",
"IdentityProtection.Get",
"IdentityProviders.Get",
"InfomationProtecion.Get",
"Invitations.Get",
"OAuth2PermissionGrants.Get",
"Organization.Get",
"PermissionGrants.Get",
"Places.Count.Get",
"Places.GraphRoom.Get",
"Planner.Get",
"Policies.Get",
"Print.Get",
"Privacy.Get",
"Reports.Get",
"RoleManagement.Get",
"SchemaExtensions.Get",
"ScopedRoleMemberships.Get",
"Search.Get",
"Security.Get",
"ServicePrincipals.Get",
"Shares.Get",
"Sites.Get",
"Solutions.Get",
"SubscribedSkus.Get",
"Subscriptions.Get",
"Teams.Get",
"TeamsTemplates.Get",
"Teamwork.Get",
"TenantRelationships.Get",
"Users.Get"
],
"timestamp": "<timestamp_returned_by_server>"
}
服務器只會接受比服務器時間年齡少於30秒的請求。
有關可能的API,請參見http-api.md
我們創建了一個模塊系統來擴展程序,您可以檢查模塊。 md以獲取更多信息。