Používání REST API s AdminSDK
Google API nám pomocí API umožňuje spravovat celou škálu úkonů ve Workspace.
1. Vytvoření projektu na Google Cloud platformě
- Vytvořit si účet s oprávněními které účet potřebuje (Directory Admin, SuperUser ...). Tento účet se bude autentizovat a autorizovat proti Google.
- Potřebujeme si vytvořit projekt pod kterým budeme s Google Workspace manipulovat. Otevřít konzoli pro správu a kromě organizace (např.:
cvut.it) bychom zde neměli nic mít (pokud jsme zde poprvé). Zde si vytvoříme projekt pomocíNEW PROJECTtlačítka, třebaTEST-PROJEKT. Vybereme si projekt a jdeme si vytvořit přístupové údaje (CTRL+O/Open project picker). - Otevřít si menu
[.]=>APIs & Services-
Enabled APIs & Services:-
Admin SDK API
-
-
Credentials:-
API Keys:-
None/IP addresses(kde si zvolím svou veřejnou adresu/rozsah) -
API restrictions:-
Restrict key:-
Admin SDK API
-
-
-
-
OAuth 2.0 Client IDs
-
-
OAuth consent screen:-
Audience:-
Internal
-
-
-
Data Access:-
.../auth/userinfo.email -
.../auth/userinfo.profile -
openid -
.../auth/admin.directory.user.security -
.../auth/admin.directory.user
-
-
- Po zkopírování
Client ID,Client secretaAPI keymůžeme pokračovat s klientskou aplikací.
2. Používání API
⚠️ Tento příklad je stavěn na
Windows PowerShell. Přepsání na běžnýbashje jednoduché, stačí jinak definovatproměnné,cyklya místocurl.exepoužít pouzecurl.
-
Definovat si ty tři proměnné co potřebujeme
$Client_ID = "594102521534-24sq71bb9mtkjqubrgc548gfwwjipmam.apps.googleusercontent.com" $Client_Sekret = "GOMZFK-FbJFnlIc4O_5g8XWb4Tw3Xv5B1Zp" $PAPI_KEY = "AIzaSyCmdYATXDAbsaasd0CSadrsm3sb" -
Poskládat si adresu pro Webové ověření (k tomu potřebujeme
Client Id) a otevřít v prohlížeči:🗒️ Používáme zde scope pro správu uživatelů
https://www.googleapis.com/auth/admin.directory.user+openid+profileNapř.:
https://accounts.google.com/o/oauth2/v2/auth?scope=openid%20profile%20https://www.googleapis.com/auth/admin.directory.user&access_type=offline&include_granted_scopes=true&response_type=code&state=state_parameter_passthrough_value&redirect_uri=https%3A//localhost/code&client_id=594102521534-24sq71bb9mtkjqubrgc548gfwwjipmam.apps.googleusercontent.com -
V prohlížeči se přihlásit a potvrdit potřebná oprávnění.
-
Po oveření bude stránka přesměrována na
localhost, zde si vykopírujeme autentikační kód za klíčemcode=který platí JEN JEDNOU🗒️ Z kompletní adresy např.:
https://localhost/code?state=state_parameter_passthrough_value&code=4/0AUJH-x72nOaW68JD2gxcv11Evn5-uPAaI6j5o_nM755liciwr_...si vypreparuji4/0AUJH-x72nOaW68JD2gxcv11Evn5-uPAaI6j5o_nM755liciwr_... -
Nastavím si autentikační kód do proměnné:
$AUTH_CODE = '4/0AUJH-x72nOaW68JD2gxcv11Evn5-uPAaI6j5o_nM755liciwr_...' -
Nyní je potřeba se autorizovat, jdeme tedy získat token:
$TOKEN = $(curl.exe -X POST ` -d client_id=${Client_ID} ` -d client_secret=${Client_Sekret} ` -d grant_type=authorization_code ` -d redirect_uri=https%3A//localhost/code ` -d code=${AUTH_CODE} ` https://accounts.google.com/o/oauth2/token ` | ConvertFrom-JSON) -
Uložit si přístupový token, id token a token pro obnovu do proměnných:
$ACCESS_TOKEN = ${TOKEN}.access_token $ID_TOKEN = $TOKEN.id_token $REFRESH_TOKEN = $TOKEN.refresh_token Write-Host "ACCESS_TOKEN: $ACCESS_TOKEN" -ForegroundColor Yellow Write-Host "ID_TOKEN: $ID_TOKEN" -ForegroundColor Yellow Write-Host "REFRESH_TOKEN: $REFRESH_TOKEN" -ForegroundColor Yellow -
Nyní můžeme používat Google API! Nezapomenou obnovovat token:
curl.exe ` --request POST ` --data "client_id=$Client_ID&client_secret=$Client_Sekret&refresh_token=$REFRESH_TOKEN&grant_type=refresh_token" ` https://accounts.google.com/o/oauth2/token
Vylistování všech uživatelů
-
Odstraním si .csv do kterého uživatele zapisuji
Remove-Item chuchel_uzivatele.csv -ErrorAction SilentlyContinue -
Získám první stránku s uživateli a nastavím si
NextPageTokenabych věděl na kterou další stránku mám jít. Potom zapíšu výsledek do souboru:$RESPONSE = $(curl.exe ` "https://admin.googleapis.com/admin/directory/v1/users?key=$PAPI_KEY&domain=<DOMÉNA>&maxResults=500" ` --header "Authorization: Bearer $ACCESS_TOKEN" ` --header 'Accept: application/json' | ConvertFrom-JSON) $NextPageToken = $RESPONSE.nextPageToken Write-Host "NEXT PAGE TOKEN: $NextPageToken.nextPageToken" -ForegroundColor Yellow $RESPONSE.users | ConvertTo-Csv -Delimiter ';' >> chuchel_uzivatele.csv -
Cyklem získáme další stránky dokud budeme dostávat odpověď:
while ($NextPageToken -notlike ""){ $RESPONSE = $(curl.exe ` "https://admin.googleapis.com/admin/directory/v1/users?key=$PAPI_KEY&domain=<DOMÉNA>&maxResults=500&pageToken=$NextPageToken" ` --header "Authorization: Bearer $ACCESS_TOKEN" ` --header 'Accept: application/json' | ConvertFrom-JSON) $NextPageToken = $RESPONSE.nextPageToken Write-Host "NEXT PAGE TOKEN: $NextPageToken.nextPageToken" -ForegroundColor Yellow $RESPONSE.users | ConvertTo-Csv -Delimiter ';' >> chuchel_uzivatele.csv Get-Content chuchel_uzivatele.csv | Measure-Object | select Count }
Načtení csv do PowerShellu
- Takto si vylistuje všechny co se nikdy nepřihlásili a nemají username
lvice*@<DOMÉNA>:$ALL_USERS | Where { $_.lastLoginTime -eq '1970-01-01T00:00:00.000Z' -and $_.primaryEmail -notlike "lvice*@<DOMÉNA>" | Select id,primaryEmail-
Jak tyhle lidi odstraním?
$ALL_USERS | ` $ALL_USERS | Where { $_.lastLoginTime -eq '1970-01-01T00:00:00.000Z' -and $_.primaryEmail -notlike "lvice*@<DOMÉNA> | Select id,primaryEmail | ` Select id,primaryEmail | Select -Last 700 | ` ForEach { $USER_ID = $_.id $USER_EMAIL = $_.primaryEmail Write-Host "Removing user with ID $USER_ID, email $USER_EMAIL" -ForegroundColor Red curl.exe --request DELETE ` "https://admin.googleapis.com/admin/directory/v1/users/${USER_ID}?domain=<DOMÉNA>" ` --header "Authorization: Bearer $ACCESS_TOKEN" ` --header 'Accept: application/json' ` --compressed } -
Sakra, odstranil jsem nějaký konta nechtíc, tak takhle je od-odstraním:
$ALL_USERS | ` Where { $_.primaryEmail -like "u3v*@<DOMÉNA>" } | ` Select id,primaryEmail | ` ForEach { $USER_ID = $_.id $USER_EMAIL = $_.primaryEmail Write-Host "UN-Removing user with ID $USER_ID, email $USER_EMAIL" -ForegroundColor Yellow curl.exe --request POST ` "https://admin.googleapis.com/admin/directory/v1/users/${USER_ID}/undelete?domain=<DOMÉNA>" ` --header "Authorization: Bearer $ACCESS_TOKEN" ` --header 'Accept: application/json' ` --header 'Content-Type: application/json' ` --data '{}' ` --compressed }
-
No comments to display
No comments to display