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.

SingleAccountPublicClientApplication UML Class Diagram

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 a MsalClientException 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 SingleAccountPublicClientApplicationszemlé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 getAccountsaz 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)
        {
        }
});