Ottenere l'accesso all'API REST in un contesto utente
In alcuni scenari, potrebbe essere necessario ottenere l'accesso all'API REST in un contesto utente utilizzando il flusso di autorizzazione dispositivo. I passaggi per configurarlo sono stati documentati in PowerShell, ma è possibile utilizzare qualsiasi linguaggio. Ecco come funziona:
Interroghi l'endpoint di configurazione OpenID well-known per recuperare gli endpoint del token e di autorizzazione dispositivo del server:
try {
$wellKnownResponse = Invoke-RestMethod -Method Get -Uri $wellKnownEndpoint
$tokenEndpoint = $wellKnownResponse.token_endpoint
$deviceCodeEndpoint = $wellKnownResponse.device_authorization_endpoint
} catch {
Write-Error "Error obtaining server information"
exit
}Invii una richiesta all'endpoint di autorizzazione dispositivo per ottenere un codice dispositivo, un codice utente, un URL di verifica e un URL di verifica completo, nonché i dettagli relativi alla durata di validità dei codici e alla frequenza dei controlli. Quindi, apra un browser sull'URL di verifica completo oppure indichi all'utente di inserire manualmente il proprio codice utente e di approvare la richiesta di accesso del dispositivo:
$body = "client_id=$clientId&scope=$([uri]::EscapeDataString($scope))"
try {
$deviceCodeResponse = Invoke-RestMethod -Method Post -Uri $deviceCodeEndpoint `
-ContentType "application/x-www-form-urlencoded" -Body $body
} catch {
Write-Error "Failed to obtain device code: $_"
exit
}
# Extract values from the response (field names may vary by provider)
$device_code = $deviceCodeResponse.device_code
$user_code = $deviceCodeResponse.user_code
$verification_uri = $deviceCodeResponse.verification_uri
$verification_uri_complete = $deviceCodeResponse.verification_uri_complete
$interval = 10 # in seconds
$expires_in = $deviceCodeResponse.expires_in # in seconds
# Provide a default interval if none was returned or if it's zero/null
if (-not $interval -or $interval -eq 0) {
$interval = 5
Write-Host "Interval not provided or invalid; defaulting to $interval seconds."
}
# Instead of instructing the user, open the browser to the verification_uri_complete
if ($verification_uri_complete) {
Write-Host "Opening browser for device authorization..."
Start-Process $verification_uri_complete
} else {
Write-Host "verification_uri_complete not provided. Please manually go to $verification_uri and enter the code: $user_code"
}Avvii un ciclo che invia periodicamente una richiesta all'endpoint del token con il codice dispositivo e il client ID finché il server non restituisce un token di accesso:
Quando necessario, utilizzi il token di aggiornamento ottenuto durante il passaggio n. 1 per richiedere un nuovo token all'endpoint del token, garantendo un accesso continuo all'applicazione:
Vedere anche
Ultimo aggiornamento
È stato utile?