Android için ADAL'dan MSAL'ye geçiş kılavuzu
Bu makalede, Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) kullanmak üzere Azure Active Directory Kimlik Doğrulama Kitaplığı'nı (ADAL) kullanan bir uygulamayı geçirmek için yapmanız gereken değişiklikler vurgulanır.
Fark vurguları
ADAL, Azure AD v1.0 uç noktasıyla çalışır. Microsoft Kimlik Doğrulama Kitaplığı (MSAL), eski adıyla Azure AD v2.0 uç noktası olarak bilinen Microsoft kimlik platformu ile çalışır. Microsoft kimlik platformu, Azure AD v1.0'dan farklıdır:
Destekle -yen:
Kuruluş Kimliği (Microsoft Entra Id)
Outlook.com, Xbox Live gibi kuruluş dışı kimlikler
(yalnızca Azure AD B2C) Google, Facebook, X ve Amazon ile federasyon oturumu açma
Standartların uyumlu olup olmadığını:
- OAuth v2.0
- OpenID Connect (OIDC)
MSAL genel API'si aşağıdakiler dahil olmak üzere önemli değişiklikler sunar:
- Belirteçlere erişmek için yeni bir model:
- ADAL, sunucuyu temsil eden aracılığıyla belirteçlere
AuthenticationContext
erişim sağlar. MSAL, istemcisiniPublicClientApplication
temsil eden aracılığıyla belirteçlere erişim sağlar. İstemci geliştiricilerin etkileşim kurmaları gereken her Yetkili için yeniPublicClientApplication
bir örnek oluşturmaları gerekmez. Yalnızca birPublicClientApplication
yapılandırma gereklidir. - Kaynak tanımlayıcılarına ek olarak kapsamları kullanarak erişim belirteçleri isteme desteği.
- Artımlı onay desteği. Geliştiriciler, kullanıcı uygulamada uygulama kaydı sırasında dahil olmayanlar da dahil olmak üzere daha fazla işleve eriştiğinde kapsamlar isteyebilir.
- Yetkililer artık çalışma zamanında doğrulanmaz. Bunun yerine geliştirici, geliştirme sırasında 'bilinen yetkililerin' listesini bildirir.
- ADAL, sunucuyu temsil eden aracılığıyla belirteçlere
- Belirteç API'sinde yapılan değişiklikler:
- ADAL'da ilk
AcquireToken()
olarak sessiz bir istekte bulunur. Bu başarısız olursa etkileşimli bir istekte bulunur. Bu davranış, bazı geliştiricilerin yalnızcaAcquireToken
öğesine güvenmesine neden oldu ve bu da kullanıcının bazen beklenmedik bir şekilde kimlik bilgileri istemesine neden oldu. MSAL, geliştiricilerin kullanıcı arabirimi istemi aldığında kasıtlı olarak kullanılmasını gerektirir.AcquireTokenSilent
her zaman başarılı veya başarısız olan sessiz bir istekle sonuç verir.AcquireToken
her zaman kullanıcı arabirimi aracılığıyla kullanıcıya soran bir istekle sonuçilir.
- ADAL'da ilk
- MSAL, varsayılan tarayıcıdan veya ekli web görünümünden oturum açmayı destekler:
- Varsayılan olarak, cihazdaki varsayılan tarayıcı kullanılır. Bu, MSAL'nin bir veya daha fazla oturum açmış hesapta zaten mevcut olabilecek kimlik doğrulama durumunu (tanımlama bilgileri) kullanmasına olanak tanır. Kimlik doğrulama durumu yoksa, MSAL aracılığıyla yetkilendirme sırasında kimlik doğrulaması, aynı tarayıcıda kullanılacak diğer web uygulamalarının yararına oluşturulan kimlik doğrulama durumu (tanımlama bilgileri) ile sonuçlanır.
- Yeni özel durum modeli:
- Özel durumlar, oluşan hata türünü ve geliştiricinin sorunu çözmek için yapması gerekenleri daha net bir şekilde tanımlar.
- MSAL, ve
AcquireTokenSilent
çağrıları içinAcquireToken
parametre nesnelerini destekler. - MSAL aşağıdakiler için bildirim temelli yapılandırmayı destekler:
- İstemci Kimliği, Yeniden Yönlendirme URI'si.
- Katıştırılmış ve Varsayılan Tarayıcı karşılaştırması
- Yetkili
- Okuma ve bağlantı zaman aşımı gibi HTTP ayarları
Uygulama kaydınız ve MSAL'ye geçişiniz
MSAL kullanmak için mevcut uygulama kaydınızı değiştirmeniz gerekmez. Artımlı/aşamalı onaydan yararlanmak istiyorsanız, artımlı olarak istemek istediğiniz belirli kapsamları belirlemek için kaydı gözden geçirmeniz gerekebilir. Kapsamlar ve artımlı onay hakkında daha fazla bilgi aşağıdadır.
Portaldaki uygulama kaydınızda bir API izinleri sekmesi görürsünüz. Bu, uygulamanızın şu anda erişim istemek üzere yapılandırıldığı API'lerin ve izinlerin (kapsamların) listesini sağlar. Ayrıca, her API izniyle ilişkili kapsam adlarının listesini de gösterir.
Kullanıcı onayı
ADAL ve Azure AD v1.0 uç noktası ile, ilk kullanımda sahip oldukları kaynaklara kullanıcı onayı verildi. MSAL ve Microsoft kimlik platformu ile onay artımlı olarak istenebilir. Artımlı onay, kullanıcının yüksek ayrıcalık olarak değerlendirebileceği izinler için yararlıdır veya izin neden gerekli olduğuna ilişkin net bir açıklamayla sağlanmadıysa başka bir şekilde sorulabilir. ADAL'da bu izinler kullanıcının uygulamanızda oturum açmayı bırakmasına neden olmuş olabilir.
Bahşiş
Kullanıcılarınıza uygulamanızın neden izin gerektiği hakkında ek bağlam sağlamak için artımlı onay kullanın.
Yönetici onayı
Kuruluş yöneticileri, kuruluşunuzun tüm üyeleri adına uygulamanızın gerektirdiği izinleri onaylayabilir. Bazı kuruluşlar yalnızca yöneticilerin uygulamalara onay vermesine izin verir. Yönetici onayı, uygulama kaydınıza uygulamanız tarafından kullanılan tüm API izinlerini ve kapsamlarını eklemenizi gerektirir.
Bahşiş
Uygulama kaydınıza dahil olmayan bir şey için MSAL kullanarak kapsam isteğinde bulunabilseniz de, uygulama kaydınızı bir kullanıcının izin verebileceği tüm kaynakları ve kapsamları içerecek şekilde güncelleştirmenizi öneririz.
Kaynak kimliklerinden kapsamlara geçiş
İlk kullanımdaki tüm izinler için kimlik doğrulaması ve yetkilendirme isteme
Şu anda ADAL kullanıyorsanız ve artımlı onay kullanmanız gerekmiyorsa, MSAL kullanmaya başlamanın en basit yolu yeni AcquireTokenParameter
nesneyi kullanarak istekte acquireToken
bulunmak ve kaynak kimliği değerini ayarlamaktır.
Dikkat
Hem kapsamları hem de kaynak kimliğini ayarlamak mümkün değildir. Her ikisini de ayarlamaya çalışmak bir IllegalArgumentException
ile sonuçlanır.
Bu, kullandığınız aynı v1 davranışına neden olur. Uygulama kaydınızda istenen tüm izinler ilk etkileşimleri sırasında kullanıcıdan istenir.
Kimlik doğrulaması ve yalnızca gerektiğinde izin isteme
Artımlı onaydan yararlanmak için, uygulamanızın uygulama kaydınızdan kullandığı izinlerin (kapsamların) listesini oluşturun ve bunları aşağıdakilere göre iki liste halinde düzenleyin:
- Kullanıcının oturum açma sırasında uygulamanızla ilk etkileşimi sırasında istemek istediğiniz kapsamlar.
- Uygulamanızın önemli bir özelliğiyle ilişkili olan ve kullanıcıya açıklamanız gereken izinler.
Kapsamları düzenledikten sonra, her listeyi belirteç istemek istediğiniz kaynağa (API) göre düzenleyin. Kullanıcının aynı anda yetkilendirmesini istediğiniz diğer kapsamların yanı sıra.
MSAL'ye isteğinizi yapmak için kullanılan parameters nesnesi aşağıdakileri destekler:
Scope
: Erişim belirteci için yetkilendirme istemek ve almak istediğiniz kapsamların listesi.ExtraScopesToConsent
: Başka bir kaynak için erişim belirteci isterken yetkilendirme istemek istediğiniz kapsamların ek listesi. Bu kapsam listesi, kullanıcı yetkilendirmesi istemek için gereken sayısını en aza indirmenize olanak tanır. Bu da daha az kullanıcı yetkilendirmesi veya onay istemleri anlamına gelir.
AuthenticationContext'ten PublicClientApplications'a geçiş
PublicClientApplication Oluşturma
MSAL kullandığınızda bir örneği oluşturursunuz PublicClientApplication
. Bu nesne, uygulama kimliğinizi modeller ve bir veya daha fazla yetkiliye istekte bulunmak için kullanılır. Bu nesneyle istemci kimliğinizi, yeniden yönlendirme URI'nizi, varsayılan yetkilinizi, cihaz tarayıcısının kullanılıp kullanılmayacağını ve ekli web görünümünün, günlük düzeyinin ve daha fazlasını yapılandıracaksınız.
Dosya olarak sağladığınız veya APK'nızın içinde kaynak olarak depoladığınız JSON ile bu nesneyi bildirimli olarak yapılandırabilirsiniz.
Bu nesne tekil olmasa da, hem etkileşimli hem de sessiz istekler için dahili olarak paylaşılan Executors
kullanır.
İşletmeden İşletmeye
ADAL'da, erişim belirteçleri istediğiniz her kuruluş için ayrı bir örneği AuthenticationContext
gerekir. MSAL'de bu artık bir gereksinim değildir. Sessiz veya etkileşimli isteğinizin bir parçası olarak belirteç istemek istediğiniz yetkiliyi belirtebilirsiniz.
Yetkili doğrulamadan bilinen yetkililere geçiş
MSAL'nin, yetkili doğrulamasını etkinleştirmek veya devre dışı bırakmak için bir bayrağı yoktur. Yetkili doğrulama, ADAL'da ve MSAL'nin ilk sürümlerinde kodunuzun kötü amaçlı olabilecek bir yetkiliden belirteç istemesini engelleyen bir özelliktir. MSAL artık Microsoft tarafından bilinen bir yetkili listesini alır ve bu listeyi yapılandırmanızda belirttiğiniz yetkililerle birleştirir.
Bahşiş
Azure İşletmeden Müşteriye (B2C) kullanıcısıysanız, bu artık yetkili doğrulamayı devre dışı bırakmanız gerekmediğini gösterir. Bunun yerine, desteklenen Azure AD B2C ilkelerinizin her birini MSAL yapılandırmanıza yetkili olarak ekleyin.
Microsoft tarafından bilinmeyen ve yapılandırmanıza dahil olmayan bir yetkiliyi kullanmaya çalışırsanız bir UnknownAuthorityException
alırsınız.
Günlük tutmak
Artık günlüğe kaydetmeyi yapılandırmanızın bir parçası olarak bildirimli olarak yapılandırabilirsiniz, örneğin:
"logging": {
"pii_enabled": false,
"log_level": "WARNING",
"logcat_enabled": true
}
UserInfo'dan Hesaba Geçiş
ADAL'de, AuthenticationResult
kimliği doğrulanmış hesap hakkındaki bilgileri almak için kullanılan bir UserInfo
nesne sağlar. bir insan veya yazılım aracısı anlamına gelen "kullanıcı" terimi, bazı uygulamaların birden çok hesabı olan tek bir kullanıcıyı (ister bir insan ister yazılım aracısı) desteklediğini bildirmeyi zorlaştıracak şekilde uygulandı.
Bir banka hesabı düşünün. Birden fazla finans kurumunda birden fazla hesabınız olabilir. Bir hesabı açtığınızda, size (kullanıcıya) her hesap için bakiyenize, fatura ödemelerinize vb. erişmek için kullanılan ATM Kartı ve PIN gibi kimlik bilgileri verilir. Bu kimlik bilgileri yalnızca bunları veren finans kurumunda kullanılabilir.
Benzetmeyle, finans kurumundaki hesaplar gibi, Microsoft kimlik platformu hesaplara kimlik bilgileri kullanılarak erişilir. Bu kimlik bilgileri Microsoft'a kaydedilir veya microsoft tarafından verilir. Veya microsoft tarafından bir kuruluş adına.
bu benzetmede Microsoft kimlik platformu bir finans kurumundan farklı olduğu durumlarda, Microsoft kimlik platformu bir kullanıcının birden çok kişiye ve kuruluşa ait kaynaklara erişmek için bir hesap ve ilişkili kimlik bilgilerini kullanmasına olanak tanıyan bir çerçeve sağlamasıdır. Bu, bir banka tarafından verilen bir kartı başka bir finans kurumunda kullanmak gibidir. Bu işe yarar çünkü söz konusu kuruluşların tümü Microsoft kimlik platformu kullanır ve bu da bir hesabın birden çok kuruluşta kullanılmasına olanak tanır. İşte bir örnek:
Sam Contoso.com için çalışır ancak Fabrikam.com ait Azure sanal makinelerini yönetir. Sam'in Fabrikam'ın sanal makinelerini yönetmesi için bunlara erişim yetkisine sahip olması gerekir. Bu erişim, Sam'in hesabını Fabrikam.com ekleyip hesabına sanal makinelerle çalışmasına olanak tanıyan bir rol vererek verilebilir. Bu, Azure portalı ile yapılır.
Sam'in Contoso.com hesabının Fabrikam.com üyesi olarak eklenmesi, Fabrikam.com'nin Sam için Microsoft Entra Kimliği'nde yeni bir kayıt oluşturulmasına neden olur. Sam'in Microsoft Entra Id'deki kaydı kullanıcı nesnesi olarak bilinir. Bu durumda, bu kullanıcı nesnesi Contoso.com'da Sam'in kullanıcı nesnesine işaret eder. Sam'in Fabrikam kullanıcı nesnesi Sam'in yerel gösterimidir ve Sam ile ilişkili hesap hakkındaki bilgileri Fabrikam.com bağlamında depolamak için kullanılır. Contoso.com'da Sam'in unvanı Kıdemli DevOps Danışmanı'dır. Fabrikam'da Sam'in unvanı Contractor-Sanal Makineler'dir. Contoso.com'da, Sam sanal makineleri yönetmek için sorumlu veya yetkilendirilmemektedir. Fabrikam.com'da tek iş işlevi bu. Ancak Sam'in izleyebileceğiniz yalnızca bir kimlik bilgisi kümesi vardır ve bunlar Contoso.com tarafından verilen kimlik bilgileridir.
Başarılı acquireToken
bir çağrı yapıldıktan sonra, sonraki acquireTokenSilent
isteklerde kullanılabilecek bir IAccount
nesneye başvuru görürsünüz.
IMultiTenantAccount
Hesabın temsilildiği kiracıların her birinden bir hesap hakkındaki taleplere erişen bir uygulamanız varsa, nesnesine IMultiTenantAccount
yayınlayabilirsinizIAccount
. Bu arabirim, geçerli hesaba göre belirteç isteğinde bulunduğunuz kiracıların her birinde hesaba ait taleplere erişmenizi sağlayan, kiracı kimliğine göre anahtarlanmış bir eşlemesi ITenantProfiles
sağlar.
ve kök IAccount
IMultiTenantAccount
dizinindeki talepler her zaman ev kiracısından gelen talepleri içerir. Ev kiracısı içinde henüz bir belirteç isteğinde bulunmadıysanız, bu koleksiyon boş olur.
Diğer değişiklikler
Yeni AuthenticationCallback'i kullanma
// Existing ADAL Interface
public interface AuthenticationCallback<T> {
/**
* This will have the token info.
*
* @param result returns <T>
*/
void onSuccess(T result);
/**
* Sends error information. This can be user related error or server error.
* Cancellation error is AuthenticationCancelError.
*
* @param exc return {@link Exception}
*/
void onError(Exception exc);
}
// New Interface for Interactive AcquireToken
public interface AuthenticationCallback {
/**
* Authentication finishes successfully.
*
* @param authenticationResult {@link IAuthenticationResult} that contains the success response.
*/
void onSuccess(final IAuthenticationResult authenticationResult);
/**
* Error occurs during the authentication.
*
* @param exception The {@link MsalException} contains the error code, error message and cause if applicable. The exception
* returned in the callback could be {@link MsalClientException}, {@link MsalServiceException}
*/
void onError(final MsalException exception);
/**
* Will be called if user cancels the flow.
*/
void onCancel();
}
// New Interface for Silent AcquireToken
public interface SilentAuthenticationCallback {
/**
* Authentication finishes successfully.
*
* @param authenticationResult {@link IAuthenticationResult} that contains the success response.
*/
void onSuccess(final IAuthenticationResult authenticationResult);
/**
* Error occurs during the authentication.
*
* @param exception The {@link MsalException} contains the error code, error message and cause if applicable. The exception
* returned in the callback could be {@link MsalClientException}, {@link MsalServiceException} or
* {@link MsalUiRequiredException}.
*/
void onError(final MsalException exception);
}
Yeni özel durumlara geçiş
ADAL'de, sabit listesi değerini almak ADALError
için bir yöntem içeren bir özel durum AuthenticationException
türü vardır.
MSAL'de özel durum hiyerarşisi vardır ve her birinin kendi ilişkili belirli hata kodları kümesi vardır.
İstisna | Açıklama |
---|---|
MsalArgumentException |
Bir veya daha fazla giriş bağımsız değişkeni geçersizse oluşturulur. |
MsalClientException |
Hata istemci tarafıysa oluşturulur. |
MsalDeclinedScopeException |
İstenen bir veya daha fazla kapsam sunucu tarafından reddedildiyse oluşturulur. |
MsalException |
MSAL tarafından varsayılan olarak denetlenen özel durum oluştu. |
MsalIntuneAppProtectionPolicyRequiredException |
Kaynağın MAMCA koruma ilkesi etkinleştirilmişse oluşturulur. |
MsalServiceException |
Hata sunucu tarafıysa oluşturulur. |
MsalUiRequiredException |
Belirteç sessizce yenilenemiyorsa oluşturulur. |
MsalUserCancelException |
Kullanıcı kimlik doğrulama akışını iptal ederse oluşturulur. |
ADALError to MsalException çevirisi
ADAL'da bu hataları yakalıyorsanız... | ... şu MSAL özel durumlarını yakalayın: |
---|---|
Eşdeğer ADALError yok | MsalArgumentException |
|
MsalClientException |
Eşdeğer ADALError yok | MsalDeclinedScopeException |
|
MsalException |
Eşdeğer ADALError yok | MsalIntuneAppProtectionPolicyRequiredException |
|
MsalServiceException |
|
MsalUiRequiredException |
Eşdeğer ADALError yok | MsalUserCancelException |
MSAL Günlüğüne ADAL Günlüğü
// Legacy Interface
StringBuilder logs = new StringBuilder();
Logger.getInstance().setExternalLogger(new ILogger() {
@Override
public void Log(String tag, String message, String additionalMessage, LogLevel logLevel, ADALError errorCode) {
logs.append(message).append('\n');
}
});
// New interface
StringBuilder logs = new StringBuilder();
Logger.getInstance().setExternalLogger(new ILoggerCallback() {
@Override
public void log(String tag, Logger.LogLevel logLevel, String message, boolean containsPII) {
logs.append(message).append('\n');
}
});
// New Log Levels:
public enum LogLevel
{
/**
* Error level logging.
*/
ERROR,
/**
* Warning level logging.
*/
WARNING,
/**
* Info level logging.
*/
INFO,
/**
* Verbose level logging.
*/
VERBOSE
}