Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln hjälper dig att förstå vilka typer som används i offentliga klientappar för enskilda och flera konton, med fokus på offentliga klientappar för enskilda konton.
ADAL (Azure Active Directory Authentication Library) modellerar servern. Microsofts autentiseringsbibliotek (MSAL) modellerar i stället klientprogrammet. Majoriteten av Android-appar betraktas som offentliga klienter. En offentlig klient är en app som inte säkert kan hålla en hemlighet.
MSAL är specialiserat på API-ytan PublicClientApplication för att förenkla och förtydliga utvecklingsupplevelsen för appar som endast tillåter att ett konto används i taget.
PublicClientApplication är underklassad av SingleAccountPublicClientApplication och MultipleAccountPublicClientApplication. Följande diagram visar relationen mellan dessa klasser.
Offentligt klientprogram för enskilt konto
Med SingleAccountPublicClientApplication klassen kan du skapa en MSAL-baserad app som bara tillåter att ett enda konto loggas in i taget.
SingleAccountPublicClientApplication skiljer sig från PublicClientApplication på följande sätt:
- MSAL spårar det inloggade kontot.
- Om din app använder en broker (standardalternativet vid registrering av Microsoft Entra-appen) och är installerad på en enhet där en broker finns, verifierar MSAL att kontot fortfarande är tillgängligt på enheten.
-
signIngör att du kan logga in på ett konto uttryckligen och separat från begäran om behörigheter. -
acquireTokenSilentkräver ingen kontoparameter. Om du anger ett konto och kontot du anger inte matchar det aktuella kontot som spåras av MSAL genereras ettMsalClientException. -
acquireTokentillåter inte att användaren byter konto. Om användaren försöker växla till ett annat konto utlöses ett undantag. -
getCurrentAccountreturnerar ett resultatobjekt som innehåller följande:- Ett booleskt värde som anger om kontot har ändrats. Ett konto kan till exempel ändras på grund av att det tas bort från enheten.
- Det tidigare kontot. Detta är användbart om du behöver rensa lokala data när kontot tas bort från enheten eller när ett nytt konto är loggat in.
- Det aktuella currentAccount.
-
signOuttar bort eventuella token som är associerade med klienten från enheten.
När en Android-autentiseringsförmedlare, till exempel Microsoft Authenticator, Link to Windows (LTW) eller Intune Company Portal, är installerad på enheten och din app är konfigurerad att använda förmedlaren, tar signOut inte bort kontot från enheten.
Scenario med ett enskilt konto
Följande pseudokod visar hur du använder 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.
SignInParameters signInParameters = SignInParameters.builder()
.withActivity(getActivity()) // Pass the current activity
.withScopes(scopes) // Specify the scopes
.withCallback(new AuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult){
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.signIn(signInParameters);
// 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;
}
Offentligt klientprogram för flera konton
Klassen MultipleAccountPublicClientApplication används för att skapa MSAL-baserade appar som gör att flera konton kan loggas in samtidigt. Det gör att du kan hämta, lägga till och ta bort konton på följande sätt:
Lägga till ett konto
Använd ett eller flera konton i ditt program genom att anropa acquireToken en eller flera gånger.
Hämta konton
- Anropa
getAccountför att hämta ett specifikt konto. - Anropa
getAccountsför att hämta en lista över konton som för närvarande är kända för appen.
Din app kommer inte att kunna lista alla konton för Microsofts identitetsplattform på enheten som brokerappen känner till. Den kan bara räkna upp konton som har använts av din app. Konton som har tagits bort från enheten returneras inte av dessa funktioner.
Ta bort ett konto
Ta bort ett konto genom att anropa removeAccount med en kontoidentifierare.
Om din app är konfigurerad för att använda en broker, och en broker är installerad på enheten, tas kontot inte bort från brokern när du anropar removeAccount. Endast token som är associerade med klienten tas bort.
Scenario med flera konton
Följande pseudokod visar hur du skapar en app för flera konton, listar konton på enheten och hämtar 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
AcquireTokenParameters acquireTokenParameters = new AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(getActivity())
.withScopes(scopes)
.withCallback(new AuthenticationCallback(){
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
@Override
public void onCancel(){
}
})
.build();
app.acquireToken(acquireTokenParameters);
...
// 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
AcquireTokenSilentParameters acquireTokenSilentParameters = new AcquireTokenSilentParameters.Builder()
.withScopes(scopes)
.forAccount(selectedAccount)
.fromAuthority(authority)
.withCallback(new SilentAuthenticationCallback() {
@Override
public void onSuccess(IAuthenticationResult authenticationResult) {
mAccount = authenticationResult.getAccount();
}
@Override
public void onError(MsalException exception){
}
})
.build();
app.acquireTokenSilentAsync(acquireTokenSilentParameters);