App client pubbliche con account singolo e multiplo
Questo articolo illustra i tipi usati in app client pubbliche con account singolo e multiplo, con particolare attenzione alle app client pubbliche con account singolo.
Microsoft Authentication Library (MSAL) modella l'applicazione client. La maggior parte delle app Android è considerata client pubblici. Un client pubblico è un'app che non può mantenere un segreto in modo sicuro.
MSAL è specializzata nella superficie API di per semplificare e chiarire l'esperienza di PublicClientApplication
sviluppo per le app che consentono l'uso di un solo account alla volta. PublicClientApplication
è sottoclassato da SingleAccountPublicClientApplication
e MultipleAccountPublicClientApplication
. Il diagramma seguente illustra la relazione tra queste classi.
Applicazione client pubblica con account singolo
La SingleAccountPublicClientApplication
classe consente di creare un'app basata su MSAL che consente l'accesso a un singolo account alla volta. SingleAccountPublicClientApplication
differisce da PublicClientApplication
nei seguenti modi:
- MSAL tiene traccia dell'account attualmente connesso.
- Se l'app usa un broker (impostazione predefinita durante la registrazione dell'app portale di Azure) e viene installata in un dispositivo in cui è presente un broker, MSAL verificherà che l'account sia ancora disponibile nel dispositivo.
signIn
consente di accedere in modo esplicito e separato dagli ambiti di richiesta.acquireTokenSilent
non richiede un parametro account. Se si specifica un account e l'account specificato non corrisponde all'account corrente rilevato da MSAL, viene generata un'eccezioneMsalClientException
.acquireToken
non consente all'utente di cambiare account. Se l'utente tenta di passare a un account diverso, viene generata un'eccezione.getCurrentAccount
restituisce un oggetto risultato che fornisce quanto segue:- Valore booleano che indica se l'account è stato modificato. Un account può essere modificato in seguito alla rimozione dal dispositivo, ad esempio.
- Account precedente. Ciò è utile se è necessario eseguire una pulizia dei dati locale quando l'account viene rimosso dal dispositivo o quando un nuovo account è connesso.
- CurrentAccount.
signOut
rimuove tutti i token associati al client dal dispositivo.
Quando nel dispositivo è installato un broker di autenticazione Android, ad esempio Microsoft Authenticator o Portale aziendale Intune, l'app è configurata per l'uso del broker, signOut
non rimuoverà l'account dal dispositivo.
Scenario con account singolo
Il codice pseudo seguente illustra l'uso di SingleAccountPublicClientApplication
.
// Construct Single Account Public Client Application
ISingleAccountPublicClientApplication app = PublicClientApplication.createSingleAccountPublicClientApplication(getApplicationContext(), R.raw.msal_config);
String[] scopes = {"User.Read"};
IAccount mAccount = null;
// Acquire a token interactively
// The user will get a UI prompt before getting the token.
app.signIn(getActivity(), scopes, new AuthenticationCallback()
{
@Override
public void onSuccess(IAuthenticationResult authenticationResult)
{
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception)
{
}
@Override
public void onCancel()
{
}
}
);
// Load Account Specific Data
getDataForAccount(account);
// Get Current Account
ICurrentAccountResult currentAccountResult = app.getCurrentAccount();
if (currentAccountResult.didAccountChange())
{
// Account Changed Clear existing account data
clearDataForAccount(currentAccountResult.getPriorAccount());
mAccount = currentAccountResult.getCurrentAccount();
if (account != null)
{
//load data for new account
getDataForAccount(account);
}
}
// Sign out
if (app.signOut())
{
clearDataForAccount(mAccount);
mAccount = null;
}
Applicazione client pubblica con più account
La MultipleAccountPublicClientApplication
classe viene usata per creare app basate su MSAL che consentono l'accesso contemporaneamente a più account. Consente di ottenere, aggiungere e rimuovere account come indicato di seguito:
Aggiungi un account
Usare uno o più account nell'applicazione chiamando acquireToken
una o più volte.
Ottenere account
- Chiamare
getAccount
per ottenere un account specifico. - Chiamare
getAccounts
per ottenere un elenco di account attualmente noti all'app.
L'app non sarà in grado di enumerare tutti gli account di Microsoft Identity Platform nel dispositivo noto all'app broker. Può enumerare solo gli account usati dall'app. Gli account rimossi dal dispositivo non verranno restituiti da queste funzioni.
Rimuovere un account
Rimuovere un account chiamando removeAccount
con un identificatore di account.
Se l'app è configurata per l'uso di un broker e un broker viene installato nel dispositivo, l'account non verrà rimosso dal broker quando chiami removeAccount
. Vengono rimossi solo i token associati al client.
Scenario con più account
Lo pseudocode seguente illustra come creare un'app per più account, elencare gli account nel dispositivo e acquisire i token.
// Construct Multiple Account Public Client Application
IMultipleAccountPublicClientApplication app = PublicClientApplication.createMultipleAccountPublicClientApplication(getApplicationContext(), R.raw.msal_config);
String[] scopes = {"User.Read"};
IAccount mAccount = null;
// Acquire a token interactively
// The user will be required to interact with a UI to obtain a token
app.acquireToken(getActivity(), scopes, new AuthenticationCallback()
{
@Override
public void onSuccess(IAuthenticationResult authenticationResult)
{
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception)
{
}
@Override
public void onCancel()
{
}
});
...
// Get the default authority
String authority = app.getConfiguration().getDefaultAuthority().getAuthorityURL().toString();
// Get a list of accounts on the device
List<IAccount> accounts = app.getAccounts();
// Pick an account to obtain a token from without prompting the user to sign in
IAccount selectedAccount = accounts.get(0);
// Get a token without prompting the user
app.acquireTokenSilentAsync(scopes, selectedAccount, authority, new SilentAuthenticationCallback()
{
@Override
public void onSuccess(IAuthenticationResult authenticationResult)
{
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception)
{
}
});