通过调用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以获取更多信息。