Tek ve birden çok hesap genel istemci uygulamaları

Bu makale, tek ve birden çok hesap genel istemci uygulamalarında kullanılan türleri anlamanıza ve tek hesap genel istemci uygulamalarına odaklanmanıza yardımcı olur.

Microsoft Kimlik Doğrulama Kitaplığı (MSAL), istemci uygulamanızı modeller. Android uygulamalarının çoğu genel istemci olarak kabul edilir. Genel istemci, gizli diziyi güvenli bir şekilde tutabilen bir uygulamadır.

MSAL, api yüzeyini PublicClientApplication , aynı anda yalnızca bir hesabın kullanılmasına izin veren uygulamalar için geliştirme deneyimini basitleştirmek ve netleştirmek için özelleştirir. PublicClientApplicationve MultipleAccountPublicClientApplicationtarafından SingleAccountPublicClientApplication alt sınıflandırılır. Aşağıdaki diyagramda bu sınıflar arasındaki ilişki gösterilmektedir.

SingleAccountPublicClientApplication UML Class Diagram

Tek hesaplı genel istemci uygulaması

sınıfı, SingleAccountPublicClientApplication aynı anda yalnızca tek bir hesabın oturum açmasına izin veren MSAL tabanlı bir uygulama oluşturmanıza olanak tanır. SingleAccountPublicClientApplication aşağıdaki şekillerden PublicClientApplication farklıdır:

  • MSAL, şu anda oturum açmış olan hesabı izler.
    • Uygulamanız bir aracı kullanıyorsa (Azure portalı uygulama kaydı sırasında varsayılan değerdir) ve aracının bulunduğu bir cihazda yüklüyse, MSAL hesabın cihazda hala kullanılabilir olduğunu doğrular.
  • signIn , bir hesapta kapsam istemeden açıkça ve ayrı olarak oturum açmanıza olanak tanır.
  • acquireTokenSilent hesap parametresi gerektirmez. Bir hesap sağlarsanız ve sağladığınız hesap MSAL tarafından izlenen geçerli hesapla eşleşmiyorsa, bir MsalClientException oluşturulur.
  • acquireToken kullanıcının hesap değiştirmesine izin vermez. Kullanıcı farklı bir hesaba geçmeyi denerse bir özel durum oluşturulur.
  • getCurrentAccount aşağıdakileri sağlayan bir sonuç nesnesi döndürür:
    • Hesabın değişip değişmediğini gösteren boole değeri. Örneğin cihazdan kaldırılan bir hesap değiştirilebilir.
    • Önceki hesap. Bu, hesap cihazdan kaldırıldığında veya yeni bir hesap oturum açtığında herhangi bir yerel veri temizleme işlemi yapmanız gerektiğinde kullanışlıdır.
    • currentAccount.
  • signOut istemcinizle ilişkili tüm belirteçleri cihazdan kaldırır.

Cihaza Microsoft Authenticator veya Intune Şirket Portalı gibi bir Android Kimlik Doğrulama aracısı yüklendiğinde ve uygulamanız aracıyı kullanacak şekilde yapılandırıldığında hesabı signOut cihazdan kaldırmaz.

Tek hesap senaryosu

Aşağıdaki sahte kod kullanılarak SingleAccountPublicClientApplicationgösterilmiştir.

// 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;
}

Birden çok hesap genel istemci uygulaması

sınıfı MultipleAccountPublicClientApplication , birden çok hesabın aynı anda oturum açmasına olanak sağlayan MSAL tabanlı uygulamalar oluşturmak için kullanılır. Hesapları aşağıdaki gibi almanıza, eklemenize ve kaldırmanıza olanak tanır:

Hesap ekleme

Bir veya daha fazla kez arayarak acquireToken uygulamanızda bir veya daha fazla hesap kullanın.

Hesapları alma

  • Belirli bir hesabı almak için arayın getAccount .
  • Şu anda uygulama tarafından bilinen hesapların listesini almak için arayın getAccounts.

Uygulamanız, aracı uygulaması tarafından bilinen cihazdaki tüm Microsoft kimlik platformu hesaplarını numaralandıramaz. Yalnızca uygulamanız tarafından kullanılan hesapları numaralandırabilir. Cihazdan kaldırılan hesaplar bu işlevler tarafından döndürülmeyecektir.

Hesabı kaldırma

Hesap tanımlayıcısı ile arayarak removeAccount hesabı kaldırın.

Uygulamanız bir aracı kullanacak şekilde yapılandırılmışsa ve cihaza bir aracı yüklüyse, çağırdığınızda removeAccounthesap aracıdan kaldırılmaz. Yalnızca istemcinizle ilişkili belirteçler kaldırılır.

Birden çok hesap senaryosu

Aşağıdaki sahte kodda birden çok hesap uygulaması oluşturma, cihazdaki hesapları listeleme ve belirteç alma işlemleri gösterilmektedir.

// 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)
        {
        }
});