Ein Instrument zur Erneuerung des E5 -Abonnements durch Aufrufen von MSGRAPH APIs
Anwendung erstellen
Weitere Informationen finden Sie unter Register -Anwendung und konfigurieren Sie Berechtigungen. Wir benötigen tenant id , client id und client secret Ihrer Anwendung, um auf MSGRAPH -APIs zuzugreifen.
Benutzer Secrer -Datei erstellen
Kopieren Sie user-secret.json.example in user-secret.json und bearbeiten Sie es als Bedarf. Sie können immer weitere Anmeldeinformationen hinzufügen.
Wenn Sie stattdessen ein Zertifikat für die Sicherheit verwenden möchten, können Sie einen certificate mit Pfad zu Ihrer Zertifikatdatei stattdessen secret Taste schreiben. Wenn wir feststellen, dass Sie certificate festgelegt haben, wird es immer secret verwendet.
Wenn Sie nach der Erstellung von Bewerbung ein Zertifikat hinzufügen und geheim hinzugefügt haben, kann die client_id geändert werden. Bitte aktualisieren Sie es.
Die Verwendung von PFX -Format zu diesem Tool wird getestet. Sie müssen jedoch nur den öffentlichen Schlüsselteil (*. CRT) auf Azure hochladen.
Wenn Ihr Zertifikat über ein Passwort verfügt, können Sie einen passwords in der Benutzergeheimnis wie folgt erstellen:
{
"passwords" : {
"<sha512sum>" : " <password> "
}
} <sha512sum> ist die SHA512 -Summe der Zertifikatdatei in Lower Case und <password> ist das Passwort in klar . Bitte behalten Sie die Konfiguration geheim, um zu vermeiden, dass jemand Ihr Zertifikat verwendet, ohne zulässig zu sein.
Das Einstellen von Tagen muss vorsichtig sein, da dies DayOfWeek -Programm bedeutet, um den korrekten Wert herauszufinden.
Tipp
Wir unterstützen JSON, YAML und TOML -Formate vorerst, obwohl wir JSON als Beispiel verwenden können. Sie können immer andere Formate verwenden. Die von uns unterstützten Formate können sogar durch Verwendung von Modulen erweitert werden
Installieren Sie .NET
Weitere Informationen für weitere Informationen brauchen .NET 8 und später.
Programm bekommen
Sie können herunterladen oder erstellen, um Binärdateien zu erhalten.
Programm ausführen
Einfach ausführen ./E5Renewer
Hier sind unterstützte Argumente:
--systemd : Wenn Sie in der Systemdumgebung ausgeführt werden, sollten Sie es meistens nicht benötigen.--user-secret : Der Pfad zur geheimen Benutzerdatei.--token : Die String, um auf JSON-API zuzugreifen.--token-file : Die Datei, in der die erste Zeile als Token verwendet wird.--listen-unix-socket-permission : Die Erlaubnis zur UNIX-Domain-Socket-Datei. Wir werden die Endpunkte http://127.0.0.1:5000 standardmäßig anhören. Dies ist der Standardwert von ASP.NET Core.
ASP.NET CORE unterstützt den Parameter --urls , um --urls=http://127.0.0.1:5001 benutzerdefinierten Listen -Endpunkt festzulegen, z --urls=http://unix:/path/to/socket Die Erlaubnis der UNIX Domain Socket-Datei kann mit Argument --listen-unix-socket-permission angepasst werden.
Diese angepassten Argumente sind tatsächlich ASP.NET -Kernkonfigurationselemente, die Namen von Elementen sind die Titlecase von Argumenten. Beispielsweise wird --token auf Token zugeordnet,-haben --user-secret auf UserSecret zugeordnet, und --listen-unix-socket-permission werden auf ListenUnixSocketPermission zugeordnet. Mit dieser konvertierenden Karte können Sie die Möglichkeiten von ASP.NET Core verwenden, sie bereitzustellen, z. B. JSON -Konfiguration, Umgebungsvariable usw., aber es gibt einen speziellen Fall: --systemd sollte mit Systemd=true geliefert werden, wenn Sie kein Befehlsargument verwenden, da die Konfiguration von --systemd Core einen Wert hinzugefügt hat. Diese angepassten Argumente haben keine Kurzformen wie -s , -u .
--user-secret muss über eine beliebige Methode zur Verfügung gestellt werden, um einen ASP.NET-Kernkonfigurationswert bereitzustellen, oder eine NullReferenceException von userSecret ist thown.
Notiz
Wenn beide --token sind, bevorzugen wir --token --token-file Wenn Sie vergessen, keinen von ihnen festzulegen, verwenden wir einen zufällig generierten Wert. Sie können es in der Protokollausgabe herausfinden, nachdem Sie eine Anforderung an das Programm gesendet und einen Authentifizierungsfehler erfüllen.
Wichtig
Wenn Sie die Genehmigung von UNIX Socket festlegen möchten, müssen Sie statt dem Oktalformat seinen tatsächlichen Wert schreiben. Beispielsweise ist eine Verwendung von 511 stattdessen 777 erforderlich.
dotnet publish -c Release und Sie können bei E5Renewer/bin/Release/net8.0/publish Binary erhalten
Mit curl oder einem beliebigen Tool, das die HTTP -Anforderung senden kann, senden Sie die Anforderung an Endpunkte wie http://127.0.0.1:5000 oder UNIX Socket /path/to/socket sollten jede Anfrage mit Header Authorization: Bearer <auth_token> . Sie erhalten JSON -Antwort, wenn alles in Ordnung ist. Wenn es sich um eine Get -Anfrage handelt, senden Sie Milisekond TimeStamp in Abfragungsparam timestamp . Wenn es sich um eine Postanforderung handelt, senden Sie Milisecond Timestamp in Post JSON mit dem timestamp und konvertieren Sie sie in String. In den meisten Fällen werden wir JSON stattdessen einfacher Text zurückgeben, aber Sie müssen den Antwortcode überprüfen, um festzustellen, ob die Anforderung Erfolg ist. Wenn Sie HTTPS verwenden, senden Sie stattdessen einfach die HTTPS -Anfrage.
Zum Beispiel:
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>"
}
Der Server akzeptiert nur eine Anforderung von weniger als 30 Sekunden älter als Serverzeit.
Siehe http-api.md für mögliche APIs
Wir haben ein Modulsystem erstellt, um das Programm zu erweitern. Sie können Module.md für weitere Informationen überprüfen.