Egy- és többfiókos nyilvános ügyfélalkalmazások
Ez a cikk segít megérteni az egy- és többfiókos nyilvános ügyfélalkalmazásokban használt típusokat, és az egyfiókos nyilvános ügyfélalkalmazásokra összpontosít.
A Microsoft Authentication Library (MSAL) modelleli az ügyfélalkalmazást. Az Android-alkalmazások többsége nyilvános ügyfélnek minősül. A nyilvános ügyfél olyan alkalmazás, amely nem tud biztonságosan titkos adatokat tárolni.
Az MSAL az API felületére specializálódott, hogy egyszerűsítse és egyértelműsítse az olyan alkalmazások fejlesztési élményét PublicClientApplication
, amelyek egyszerre csak egy fiókot engedélyeznek. PublicClientApplication
alosztálya SingleAccountPublicClientApplication
és MultipleAccountPublicClientApplication
. Az alábbi ábra az osztályok közötti kapcsolatot mutatja be.
Egyfiókos nyilvános ügyfélalkalmazás
Az SingleAccountPublicClientApplication
osztály lehetővé teszi egy MSAL-alapú alkalmazás létrehozását, amely egyszerre csak egyetlen fiókot engedélyez. SingleAccountPublicClientApplication
a következő módokon tér el egymástól PublicClientApplication
:
- Az MSAL nyomon követi a jelenleg bejelentkezett fiókot.
- Ha az alkalmazás közvetítőt használ (ez az alapértelmezett az Azure Portal alkalmazásregisztrációja során), és olyan eszközön van telepítve, amelyen egy közvetítő található, az MSAL ellenőrzi, hogy a fiók továbbra is elérhető-e az eszközön.
signIn
lehetővé teszi, hogy explicit módon és a hatókörök kérésétől elkülönítve jelentkezzen be egy fiókba.acquireTokenSilent
nem igényel fiókparamétert. Ha megad egy fiókot, és a megadott fiók nem egyezik meg az MSAL által nyomon követett aktuális fiókkal, akkor aMsalClientException
fiók megjelenik.acquireToken
nem engedélyezi a felhasználónak a fiókok közötti váltást. Ha a felhasználó másik fiókra próbál váltani, a rendszer kivételt jelez.getCurrentAccount
eredményobjektumot ad vissza, amely a következőket biztosítja:- Logikai érték, amely jelzi, hogy a fiók megváltozott-e. Egy fiók például az eszközről való eltávolítása miatt módosítható.
- A korábbi fiók. Ez akkor hasznos, ha helyi adattisztítást kell végeznie, amikor a fiókot eltávolítják az eszközről, vagy ha új fiók van bejelentkezve.
- A currentAccount.
signOut
eltávolítja az ügyfélhez társított jogkivonatokat az eszközről.
Ha egy Android Authentication-közvetítő, például a Microsoft Authenticator vagy a Intune Céges portál telepítve van az eszközön, és az alkalmazás konfigurálva van a közvetítő használatára, signOut
nem távolítja el a fiókot az eszközről.
Egyfiókos forgatókönyv
Az alábbi pszeudo kód a következőt SingleAccountPublicClientApplication
szemlélteti:
// 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;
}
Több fiók nyilvános ügyfélalkalmazása
Az MultipleAccountPublicClientApplication
osztály olyan MSAL-alapú alkalmazások létrehozására szolgál, amelyek lehetővé teszik több fiók egyidejű bejelentkezését. Lehetővé teszi a fiókok lekérését, hozzáadását és eltávolítását az alábbiak szerint:
Fiók hozzáadása
Használjon egy vagy több fiókot az alkalmazásban acquireToken
egy vagy több alkalommal.
Fiókok lekérése
- Hívás
getAccount
egy adott fiók lekéréséhez. - Hívás
getAccounts
az alkalmazás által jelenleg ismert fiókok listájának lekéréséhez.
Az alkalmazás nem tudja számba venni az összes Microsoft Identitásplatform fiókot a közvetítőalkalmazás által ismert eszközön. Csak az alkalmazás által használt fiókok számbavételére képes. Az eszközről eltávolított fiókokat ezek a függvények nem adják vissza.
Fiók eltávolítása
Fiók eltávolítása fiókazonosítóval történő hívással removeAccount
.
Ha az alkalmazás úgy van konfigurálva, hogy közvetítőt használjon, és egy közvetítő van telepítve az eszközön, a fiók nem lesz eltávolítva a közvetítőből híváskor removeAccount
. A rendszer csak az ügyfélhez társított jogkivonatokat távolítja el.
Több fiók forgatókönyve
Az alábbi álkód bemutatja, hogyan hozhat létre több fiókalkalmazást, listázhat fiókokat az eszközön, és hogyan szerezhet be jogkivonatokat.
// 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)
{
}
});