Autenticazione
Altium Identity è il provider di identità OAuth 2.0 e OpenID Connect (OIDC) di Altium. La tua applicazione autentica un utente tramite Altium Identity e poi chiama l'API di Altium 365 per suo conto, senza mai gestire la password Altium dell'utente.
Le applicazioni effettuano l'accesso con authorization-code flow e PKCE. I client pubblici (applicazioni desktop, on-premise, native e a pagina singola) usano PKCE senza un segreto client; i client riservati (backend web/server) aggiungono un segreto client. I flussi passo passo, con tutte le richieste e le risposte, sono disponibili su GitHub: questa pagina spiega i concetti per aiutarti a scegliere il percorso da seguire.
Terminologia dei token
L'offerta commerciale di Altium 365 opera in quattro aree geografiche:
Termine |
Descrizione |
Global access token |
Un token a livello utente che ricevi dopo l'accesso con gli ambiti |
Workspace access token |
Un token limitato a una singola area di lavoro tramite l'ambito |
| Refresh token | Viene emesso quando richiedi l'ambito |
Per la struttura completa di un token e delle sue attestazioni, consulta Token e Ambiti OAuth.
Il percorso di accesso
Il percorso è lo stesso per le applicazioni web e desktop/on-premise: cambia solo how ottieni il codice di autorizzazione (un reindirizzamento ospitato dalla tua applicazione oppure il modello ActionWait ospitato da Altium per le applicazioni che non possono ospitarne uno). In ogni caso:
-
Sign in on Commercial Cloud (
https://auth.altium.com) per ottenere un global access token. Usalo per le risorse globali, ad esempio per elencare le aree di lavoro dell'utente. -
Discover the user's workspaces con il token globale.
-
Exchange the global token for a workspace access token, all'endpoint corrispondente all'area di lavoro (Commercial o GovCloud: vedi sotto).
-
Call the Altium 365 API con il token dell'area di lavoro, rinnovandolo presso l'endpoint che lo ha emesso.
sequenceDiagram
participant App
participant Identity as Altium Identity
participant API as Altium 365 API
App->>Identity: 1. Sign in on auth.altium.com (openid profile) + PKCE
Identity-->>App: global access token
App->>API: 2. Discover workspaces (global token)
API-->>App: workspaces (+ location)
App->>Identity: 3. Exchange for a workspace token
Identity-->>App: workspace access token (+ refresh token)
App->>API: 4. API calls (workspace access token)
Un'applicazione in genere conserva più token contemporaneamente: un token globale e un token per ogni area di lavoro in uso. Ciascuno viene rinnovato presso il proprio endpoint di emissione.
Commercial Cloud e GovCloud
Altium 365 opera in due ambienti rigorosamente separati:
-
Commercial Cloud (
auth.altium.com) — l'ambiente predefinito. -
GovCloud (
auth.365-gov.altium.com) — un ambiente isolato per le aree di lavoro soggette a ITAR o ad altre normative.
L'emittente di un token (iss) identifica l'ambiente che lo ha generato e i token dei due ambienti non sono mai intercambiabili: un token Gov viene rifiutato dai servizi Commercial e un token Commercial viene rifiutato da GovCloud. GovCloud applica questa separazione tramite un two-token model : un token di area di lavoro Gov contiene un marcatore secure che lo vincola a GovCloud. Effettui l'accesso una sola volta su Commercial Cloud, poi scambi il tuo token globale con ciascun token di area di lavoro nell'ambiente a cui appartiene quell'area di lavoro.
Quale flusso mi serve?
La tua applicazione |
Flusso |
Guida |
| Web or server applicazione che può ospitare un endpoint di reindirizzamento HTTPS | Flusso di reindirizzamento con codice di autorizzazione |
Applicazioni web e server |
Desktop, on-prem, or native applicazione che non può ospitare un reindirizzamento |
Accesso tramite browser con il modello ActionWait ospitato da Altium |
Applicazioni desktop e on-premise |
Librerie client
Non devi implementare il flusso manualmente. Altium mantiene librerie open source basate su un'unica specifica indipendente dal linguaggio e validate da una suite condivisa di test di conformità:
Linguaggio |
Documentazione di riferimento |
| TypeScript | Libreria TypeScript |
| .NET | Libreria .NET |
| Python | Libreria Python |