Bagikan melalui


Aplikasi klien publik satu dan beberapa akun

Artikel ini akan membantu Anda memahami jenis yang digunakan dalam aplikasi klien publik satu dan beberapa akun, dengan fokus pada satu akun aplikasi klien publik.

Microsoft Authentication Library (MSAL) memodelkan aplikasi klien Anda. Sebagian besar aplikasi Android dianggap sebagai klien publik. Klien publik adalah aplikasi yang tidak dapat menyimpan rahasia dengan aman.

MSAL mengkhususkan permukaan API PublicClientApplication untuk menyederhanakan dan mengklarifikasi pengalaman pengembangan untuk aplikasi yang memungkinkan hanya satu akun yang digunakan pada satu waktu. PublicClientApplication disubkelas oleh SingleAccountPublicClientApplication dan MultipleAccountPublicClientApplication. Diagram berikut menunjukkan hubungan antara ketiga kelas ini.

SingleAccountPublicClientApplication UML Class Diagram

Aplikasi klien publik akun tunggal

Kelas SingleAccountPublicClientApplication ini memungkinkan Anda membuat aplikasi berbasis MSAL yang hanya memungkinkan satu akun untuk masuk pada satu waktu. SingleAccountPublicClientApplication berbeda dari PublicClientApplication dalam cara-cara berikut:

  • MSAL melacak akun yang saat ini masuk.
    • Jika aplikasi Anda menggunakan broker (default selama pendaftaran aplikasi portal Microsoft Azure) dan diinstal pada perangkat tempat broker hadir, MSAL akan memverifikasi bahwa akun tersebut masih tersedia di perangkat.
  • signIn memungkinkan Anda untuk masuk ke akun secara eksplisit dan terpisah dari meminta cakupan.
  • acquireTokenSilent tidak memerlukan parameter akun. Jika Anda memberikan akun, dan akun yang Anda berikan tidak cocok dengan akun saat ini yang dilacak oleh MSAL, sebuah MsalClientException dilemparkan.
  • acquireToken tidak memperbolehkan pengguna untuk beralih akun. Jika pengguna mencoba beralih ke akun lain, pengecualian akan dilemparkan.
  • getCurrentAccount mengembalikan objek hasil yang menyediakan yang berikut ini:
    • Boolean menunjukkan apakah akun berubah. Akun dapat diubah sebagai akibat dari dihapus dari perangkat, misalnya.
    • Akun sebelumnya. Ini berguna jika Anda perlu melakukan pembersihan data lokal ketika akun dihapus dari perangkat atau saat akun baru masuk.
    • currentAccount.
  • signOut menghapus token apa pun yang terkait dengan klien Anda dari perangkat.

Saat broker Autentikasi Android seperti Microsoft Authenticator atau Intune Company Portal diinstal pada perangkat dan aplikasi Anda dikonfigurasi untuk menggunakan broker, signOut tidak akan menghapus akun dari perangkat.

Skenario akun tunggal

Kode pseudo berikut ini mengilustrasikan penggunaan 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;
}

Aplikasi klien publik banyak akun

Kelas MultipleAccountPublicClientApplication ini digunakan untuk membuat aplikasi berbasis MSAL yang memungkinkan beberapa akun masuk secara bersamaan. Ini memungkinkan Anda untuk mendapatkan, menambahkan, dan menghapus akun sebagai berikut:

Tambahkan akun

Gunakan satu atau beberapa akun di aplikasi Anda dengan menelepon acquireToken satu atau beberapa kali.

Dapatkan akun

  • Panggilan getAccount untuk mendapatkan akun tertentu.
  • Panggilan getAccounts untuk mendapatkan daftar akun yang saat ini diketahui oleh aplikasi.

Aplikasi Anda tidak akan dapat menghitung semua akun platform identitas Microsoft di perangkat yang dikenal oleh aplikasi broker. Ini hanya dapat menghitung akun yang telah digunakan oleh aplikasi Anda. Akun yang telah dihapus dari perangkat tidak akan dikembalikan oleh fungsi-fungsi ini.

Menghapus akun

Hapus akun dengan menelepon removeAccount dengan pengidentifikasi akun.

Jika aplikasi Anda dikonfigurasi untuk menggunakan broker, dan broker diinstal di perangkat, akun tidak akan dihapus dari broker saat Anda menelepon removeAccount. Hanya token yang terkait dengan klien Anda yang dihapus.

Skenario beberapa akun

Kode pseudo berikut menunjukkan cara membuat beberapa aplikasi akun, mencantumkan akun di perangkat, dan memperoleh 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)
        {
        }
});