Java için ADAL'dan MSAL'ye geçiş kılavuzu
Bu makalede, Microsoft Kimlik Doğrulama Kitaplığı'nın (MSAL) kullanımı için Azure Active Directory Kimlik Doğrulama Kitaplığı(ADAL) kullanan bir uygulamayı geçirmek için gereken değişiklikler vurgulanır.
Azure AD varlıklarının kimliğini doğrulamak ve Azure AD'den belirteçleri talep etmek için hem Java için Microsoft Authentication Library (MSAL4J) hem de Java için Azure AD Kimlik Doğrulama Kitaplığı (ADAL4J) kullanılır. Şimdiye kadar, geliştiricilerin çoğu Azure AD Kimlik Doğrulama Kitaplığı (ADAL) kullanarak belirteçler talep etmek için Azure AD kimliklerinin (iş ve okul hesapları) kimliğini doğrulamak için geliştiriciler için Azure AD platformuyla (v1.0) çalıştı.
MSAL aşağıdaki avantajları sunar:
- Yeni Microsoft kimlik platformu kullandığından, Azure AD İşletmeden Tüketiciye (B2C) aracılığıyla Azure AD kimlikleri, Microsoft hesapları ve sosyal ve yerel hesaplar gibi daha geniş bir Microsoft kimlikleri kümesinde kimlik doğrulamasından geçebilirsiniz.
- Kullanıcılarınız en iyi çoklu oturum açma deneyimine sahip olur.
- Uygulamanız artımlı onayı etkinleştirebilir ve koşullu erişimi desteklemek daha kolaydır.
Java için MSAL, aşağıdaki kimlik doğrulama kitaplığıyla birlikte Microsoft kimlik platformu. ADAL4J üzerinde yeni özellik uygulanmaz. İleriye yönelik tüm çalışmalar MSAL'nin geliştirilmesine odaklandı.
MSAL hakkında daha fazla bilgi edinebilirsiniz ve Microsoft Kimlik Doğrulama Kitaplığı'nın genel bakış bilgileriyle çalışmaya devam edin.
Farklılıklar
Geliştiriciler için Azure AD (v1.0) uç noktası (ve ADAL4J) ile çalışıyorsanız, Microsoft kimlik platformu.
Kapsamlar kaynak değil
ADAL4J kaynaklar için belirteçleri, Java için MSAL ise kapsamlar için belirteçleri alır. Java sınıfları için bir dizi MSAL bir scopes parametresi gerektirir. Bu parametre, istenen izinleri ve istenen kaynakları bildiren dizelerin listesidir. Örnek kapsamları Graph için bkz. Microsoft Graph'nin kapsamları.
Uygulamalarınızı /.default ADAL'dan MSAL'ye geçirmenize yardımcı olmak için kaynağa kapsam soneki eklersiniz. Örneğin, kaynak değeri için eşdeğer https://graph.microsoft.com kapsam değeri https://graph.microsoft.com/.default olur. Kaynak URL formunda değil de formun kaynak kimliği ise kapsam değerini olarak XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/.default kullanabilirsiniz.
Farklı kapsam türleri hakkında daha fazla bilgi için Microsoft kimlik platformu'de İzinler ve onay ve v1.0 belirteçlerini kabul eden bir Web API'si kapsamları makalelerine bakın.
Çekirdek sınıflar
ADAL4J'de sınıfı, Bir Yetkili aracılığıyla Güvenlik Belirteci Hizmeti AuthenticationContext (STS) veya yetkilendirme sunucusuna bağlantınızı temsil eder. Ancak Java için MSAL, istemci uygulamalarına göre tasarlanmıştır. İki ayrı sınıf sağlar: PublicClientApplication istemci uygulamalarını temsil etmek için ConfidentialClientApplication ve. İkincisi olan , daemon uygulaması için uygulama tanımlayıcısı gibi gizli bir gizli kodu güvenli bir şekilde korumak üzere tasarlanmış ConfidentialClientApplication bir uygulamayı temsil eder.
Aşağıdaki tabloda ADAL4J işlevlerinin Java işlevleri için yeni MSAL ile nasıl eşlen olduğu gösterilir:
| ADAL4J yöntemi | MSAL4J yöntemi |
|---|---|
| acquireToken(Dize kaynağı, ClientCredential kimlik bilgisi, AuthenticationCallback geri çağırma) | acquireToken(ClientCredentialParameters) |
| acquireToken(Dize kaynağı, ClientAssertion onaylaması, AuthenticationCallback geri çağırma) | acquireToken(ClientCredentialParameters) |
| acquireToken(Dize kaynağı, AsymmetricKeyCredential kimlik bilgisi, AuthenticationCallback geri çağırma) | acquireToken(ClientCredentialParameters) |
| acquireToken(Dize kaynağı, Dize clientId, Dize kullanıcı adı, Dize parolası, AuthenticationCallback geri çağırma) | acquireToken(UsernamePasswordParameters) |
| acquireToken(Dize kaynağı, Dize clientId, Dize kullanıcı adı, Dize parolası=null, AuthenticationCallback geri çağırma) | acquireToken(IntegratedWindowsAuthenticationParameters) |
| acquireToken(Dize kaynağı, UserAssertion userAssertion, ClientCredential kimlik bilgisi, AuthenticationCallback geri çağırma) | acquireToken(OnBehalfOfParameters) |
| acquireTokenByAuthorizationCode() | acquireToken(AuthorizationCodeParameters) |
| acquireDeviceCode() ve acquireTokenByDeviceCode() | acquireToken(DeviceCodeParameters) |
| acquireTokenByRefreshToken() | acquireTokenSilently(SilentParameters) |
IUser yerine IAccount
ADAL4J tarafından yönlendiren kullanıcılar. Kullanıcı tek bir insan veya yazılım aracıyı temsil ediyor olsa da, Microsoft kimlik sisteminde bir veya daha fazla hesabı olabilir. Örneğin, bir kullanıcının birkaç Azure AD, Azure AD B2C veya Microsoft kişisel hesabı olabilir.
Java için MSAL, arabirim aracılığıyla Hesap kavramını IAccount tanımlar. Bu ADAL4J'den gelen yeni bir değişikliktir, ancak aynı kullanıcının birden fazla hesabı ve hatta farklı Azure AD dizinleri içinde bile sahip olduğu gerçeği yakalaması iyi bir fikirdir. Java için MSAL, giriş hesabı bilgileri sağlanmıştır, çünkü konuk senaryolarında daha iyi bilgi sağlar.
Önbellek kalıcılığı
ADAL4J'nin belirteç önbelleği desteği yok. Java için MSAL, mümkün olduğunda süresi dolan belirteçleri otomatik olarak yeniler ve kullanıcıdan mümkün olduğunda kimlik bilgileri sağlamasını gereksiz istemleri önerek belirteç yaşam sürelerini yönetmeyi basitleştirmek için bir belirteç önbelleği ekler.
Ortak Yetkili
v1.0'da, yetkiliyi kullanırsanız, kullanıcılar herhangi bir Azure Active Directory https://login.microsoftonline.com/common (AAD) hesabıyla (herhangi bir kuruluş için) oturum açın.
v2.0'da yetkiliyi kullanırsanız, kullanıcılar herhangi bir AAD veya bir Microsoft kişisel hesabı https://login.microsoftonline.com/common (MSA) ile oturum açma yetkisine sahip olabilir. Java için MSAL'de oturum açma AAD kısıtlamak için yetkiliyi https://login.microsoftonline.com/organizations kullanın (ADAL4J ile aynı davranıştır). Bir yetkili belirtmek için, authority sınıfını oluşturmada PublicClientApplication.Builder yönteminde parametresini PublicClientApplication ayarlayın.
v1.0 ve v2.0 belirteçleri
v1.0 uç noktası (ADAL tarafından kullanılır) yalnızca v1.0 belirteçleri yayır.
v2.0 uç noktası (MSAL tarafından kullanılır) v1.0 ve v2.0 belirteçleri yayır. Web API'sinde uygulama bildiriminin özelliği, geliştiricilerin hangi belirteç sürümünün kabul edilir olduğunu seçmesini sağlar. Uygulama accessTokenAcceptedVersion bildirimi başvuru belgelerine bakın.
v1.0 ve v2.0 belirteçleri hakkında daha fazla bilgi için bkz. Azure Active Directory belirteçlerine erişme.
ADAL'dan MSAL'ye geçiş
ADAL4J'de yenileme belirteçleri açıktı ve geliştiriciler bunları önbelleğe aldı. Daha sonra, kullanıcı artık bağlı olmadığı zaman kullanıcı adına panoları yenileen uzun süre çalışan AcquireTokenByRefreshToken() hizmetler uygulama gibi çözümleri etkinleştirmek için kullanırlar.
Java için MSAL, güvenlik nedeniyle yenileme belirteçlerini açığa çıkarmaz. Bunun yerine MSAL, belirteçleri yenilemeyi sizin için halleder.
Java için MSAL, ADAL4j ile edinilen yenileme belirteçlerini ClientApplication: acquireToken(RefreshTokenParameters)içine geçirmenizi sağlayan bir API'ye sahiptir. Bu yöntemle, daha önce kullanılan yenileme belirteci ile birlikte, isteğiniz kapsamları (kaynaklar) sebilirsiniz. Yenileme belirteci yeni bir belirteçle takas edilir ve uygulamanız tarafından kullanım için önbelleğe alınmış olur.
Aşağıdaki kod parçacığında, gizli bir istemci uygulamasında bazı geçiş kodular gösterir:
String rt = GetCachedRefreshTokenForSignedInUser(); // Get refresh token from where you have them stored
Set<String> scopes = Collections.singleton("SCOPE_FOR_REFRESH_TOKEN");
RefreshTokenParameters parameters = RefreshTokenParameters.builder(scopes, rt).build();
PublicClientApplication app = PublicClientApplication.builder(CLIENT_ID) // ClientId for your application
.authority(AUTHORITY) //plug in your authority
.build();
IAuthenticationResult result = app.acquireToken(parameters);
, IAuthenticationResult bir erişim belirteci ve kimlik belirteci döndürürken, yeni yenileme belirteciniz önbellekte depolanır.
Uygulama artık bir IAccount da içerir:
Set<IAccount> accounts = app.getAccounts().join();
Artık önbellekte olan belirteçleri kullanmak için şu çağrıyı kullanın:
SilentParameters parameters = SilentParameters.builder(scope, accounts.iterator().next()).build();
IAuthenticationResult result = app.acquireToken(parameters);