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. PublicClientApplication
ve MultipleAccountPublicClientApplication
tarafından SingleAccountPublicClientApplication
alt sınıflandırılır. Aşağıdaki diyagramda bu sınıflar arasındaki ilişki gösterilmektedir.
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, birMsalClientException
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 SingleAccountPublicClientApplication
gö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 removeAccount
hesap 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)
{
}
});