Pojedyncze i wiele publicznych aplikacji klienckich konta
Ten artykuł pomoże Ci zrozumieć typy używane w aplikacjach klienckich z jednym i wieloma kontami publicznymi, koncentrując się na aplikacjach klienckich z jednym kontem publicznym.
Biblioteka Microsoft Authentication Library (MSAL) modeluje aplikację kliencą. Większość aplikacji systemu Android jest traktowana jako klienci publiczni. Klient publiczny to aplikacja, która nie może bezpiecznie przechowywać wpisu tajnego.
Biblioteka MSAL specjalizuje się w powierzchni interfejsu PublicClientApplication
API, aby uprościć i wyjaśnić środowisko programistyczne dla aplikacji, które umożliwiają korzystanie tylko z jednego konta naraz. PublicClientApplication
jest podklasy według SingleAccountPublicClientApplication
i MultipleAccountPublicClientApplication
. Na poniższym diagramie przedstawiono relację między tymi klasami.
Publiczna aplikacja kliencka pojedynczego konta
Klasa SingleAccountPublicClientApplication
umożliwia utworzenie aplikacji opartej na protokole MSAL, która umożliwia logowanie tylko jednego konta naraz. SingleAccountPublicClientApplication
różni się od PublicClientApplication
następujących sposobów:
- Biblioteka MSAL śledzi aktualnie zalogowane konto.
- Jeśli aplikacja korzysta z brokera (domyślnego podczas rejestracji aplikacji w witrynie Azure Portal) i jest zainstalowana na urządzeniu, na którym znajduje się broker, biblioteka MSAL sprawdzi, czy konto jest nadal dostępne na urządzeniu.
signIn
umożliwia jawne i oddzielne logowanie się do konta od żądań zakresów.acquireTokenSilent
nie wymaga parametru konta. Jeśli podasz konto, a podane konto nie jest zgodne z bieżącym kontem śledzonym przez bibliotekę MSAL,MsalClientException
zostanie zwrócony błąd.acquireToken
nie zezwala użytkownikowi na przełączanie kont. Jeśli użytkownik spróbuje przełączyć się na inne konto, zostanie zgłoszony wyjątek.getCurrentAccount
Zwraca obiekt wynikowy, który udostępnia następujące elementy:- Wartość logiczna wskazująca, czy konto uległo zmianie. Konto może zostać zmienione w wyniku usunięcia go z urządzenia, na przykład.
- Poprzednie konto. Jest to przydatne, jeśli musisz wykonać czyszczenie danych lokalnych po usunięciu konta z urządzenia lub zalogowaniu się nowego konta.
- Bieżącykonto.
signOut
Usuwa wszystkie tokeny skojarzone z klientem z urządzenia.
Jeśli na urządzeniu jest zainstalowany broker uwierzytelniania systemu Android, taki jak Microsoft Authenticator lub Intune — Portal firmy, a aplikacja jest skonfigurowana do korzystania z brokera, signOut
nie usunie konta z urządzenia.
Scenariusz pojedynczego konta
Poniższy pseudo kod ilustruje użycie metody 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;
}
Wiele publicznych aplikacji klienckich kont
Klasa MultipleAccountPublicClientApplication
służy do tworzenia aplikacji opartych na protokole MSAL, które umożliwiają logowanie wielu kont jednocześnie. Umożliwia pobieranie, dodawanie i usuwanie kont w następujący sposób:
Dodaj konto
Użyj co najmniej jednego konta w aplikacji, wywołując acquireToken
co najmniej jeden raz.
Pobieranie kont
- Wywołaj metodę
getAccount
, aby uzyskać określone konto. - Wywołaj metodę
getAccounts
, aby uzyskać listę kont, które są obecnie znane aplikacji.
Aplikacja nie będzie mogła wyliczać wszystkich kont Platforma tożsamości Microsoft na urządzeniu znanym aplikacji brokera. Może on wyliczać tylko konta, które zostały użyte przez aplikację. Konta, które zostały usunięte z urządzenia, nie będą zwracane przez te funkcje.
Usuwanie konta
Usuń konto, wywołując removeAccount
przy użyciu identyfikatora konta.
Jeśli aplikacja jest skonfigurowana do korzystania z brokera, a broker jest zainstalowany na urządzeniu, konto nie zostanie usunięte z brokera po wywołaniu metody removeAccount
. Usuwane są tylko tokeny skojarzone z klientem.
Scenariusz z wieloma kontami
Poniższy pseudo kod pokazuje, jak utworzyć wiele aplikacji konta, wyświetlić listę kont na urządzeniu i uzyskać 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
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)
{
}
});