Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek vám pomůže pochopit typy používané v jednoúčelových veřejných klientských aplikacích s více účty a zaměřit se na veřejné klientské aplikace s jedním účtem.
Knihovna Azure Active Directory Authentication Library (ADAL) modeluje server. Místo toho Identity a ověřování Microsoftu (MSAL) modeluje vaši klientskou aplikaci. Většina aplikací pro Android se považuje za veřejné klienty. Veřejný klient je aplikace, která nemůže bezpečně uchovávat tajný kód.
MSAL se specializuje na rozhraní PublicClientApplication API pro zjednodušení a objasnění vývojového prostředí pro aplikace, které umožňují používat vždy jenom jeden účet.
PublicClientApplication je podtříděna podle SingleAccountPublicClientApplication a MultipleAccountPublicClientApplication. Následující diagram znázorňuje vztah mezi těmito třídami.
Veřejná klientská aplikace s jedním účtem
Třída SingleAccountPublicClientApplication umožňuje vytvořit aplikaci založenou na MSAL, která umožňuje přihlášení pouze jednoho účtu najednou.
SingleAccountPublicClientApplication se liší od PublicClientApplication v následujících způsobech:
- MSAL sleduje aktuálně přihlášený účet.
- Pokud vaše aplikace používá zprostředkovatele (výchozí nastavení při registraci aplikace Microsoft Entra) a je nainstalovaná na zařízení, kde je zprostředkovatel, nástroj MSAL ověří, jestli je účet na zařízení stále dostupný.
-
signInumožňuje explicitně se přihlásit k účtu odděleně od žádosti o oprávnění. -
acquireTokenSilentnevyžaduje parametr účtu. Pokud zadáte účet a zadaný účet neodpovídá aktuálnímu účtu sledovanému službou MSAL, vyvolá se chybaMsalClientException. -
acquireTokenneumožňuje uživateli přepnout účty. Pokud se uživatel pokusí přepnout na jiný účet, vyvolá se výjimka. -
getCurrentAccountvrátí objekt výsledku, který poskytuje následující:- Logická hodnota označující, jestli se účet změnil. Účet se může změnit například v důsledku odebrání ze zařízení.
- Předchozí účet. To je užitečné, pokud potřebujete provést vyčištění místních dat, když je účet odebrán ze zařízení nebo když je nový účet přihlášený.
- Aktuální účet.
-
signOutodebere všechny tokeny přidružené k vašemu klientovi ze zařízení.
Pokud je na zařízení nainstalovaný zprostředkovatel ověřování androidu, jako je Microsoft Authenticator, odkaz na Windows (LTW) nebo Intune Portál společnosti a vaše aplikace je nakonfigurovaná tak, aby používala zprostředkovatele, signOut neodebere účet ze zařízení.
Scénář s jedním účtem
Následující pseudokód znázorňuje použití 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.
SignInParameters signInParameters = SignInParameters.builder()
.withActivity(getActivity()) // Pass the current activity
.withScopes(scopes) // Specify the scopes
.withCallback(new AuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult){
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.signIn(signInParameters);
// 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;
}
Veřejná klientská aplikace s více účty
Třída MultipleAccountPublicClientApplication se používá k vytváření aplikací založených na MSAL, které umožňují přihlášení více účtů najednou. Umožňuje získat, přidat a odebrat účty následujícím způsobem:
Přidání účtu
Použijte jeden nebo více účtů ve vaší aplikaci voláním acquireToken jednou nebo vícekrát.
Získání účtů
- Zavolejte
getAccount, abyste získali konkrétní účet. - Voláním
getAccountszobrazíte seznam účtů, které aplikace aktuálně zná.
Vaše aplikace nebude moct vytvořit výčet všech účtů Microsoft identity platform v zařízení známém pro aplikaci zprostředkovatele. Může vytvořit výčet jenom účtů, které vaše aplikace používala. Tyto funkce nevrátí účty, které byly ze zařízení odebrány.
Odebrání účtu
Odeberte účet voláním removeAccount s identifikátorem účtu.
Pokud je vaše aplikace nakonfigurovaná pro použití zprostředkovatele a v zařízení je nainstalovaný zprostředkovatel, účet se při volání removeAccount ze zprostředkovatele neodebere. Odeberou se jenom tokeny přidružené k vašemu klientovi.
Scénář s více účty
Následující pseudokód ukazuje, jak vytvořit aplikaci s více účty, vypsat účty na zařízení a získat tokeny.
// 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
AcquireTokenParameters acquireTokenParameters = new AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(getActivity())
.withScopes(scopes)
.withCallback(new AuthenticationCallback(){
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.acquireToken(acquireTokenParameters);
...
// 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
AcquireTokenSilentParameters acquireTokenSilentParameters = new AcquireTokenSilentParameters.Builder()
.withScopes(scopes)
.forAccount(selectedAccount)
.fromAuthority(authority)
.withCallback(new SilentAuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
})
.build();
app.acquireTokenSilentAsync(acquireTokenSilentParameters);