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.
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, sebuahMsalClientException
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)
{
}
});