Průvodce migrací Z ADAL do MSAL pro Javu
Tento článek popisuje změny, které je potřeba provést při migraci aplikace, která používá knihovnu ADAL (Azure Active Directory Authentication Library) k používání knihovny Microsoft Authentication Library (MSAL).
K ověřování entit Azure AD a vyžádání tokenů z Azure AD se používá Microsoft Authentication Library pro Javu (MSAL4J) i Azure AD Authentication Library pro Javu (ADAL4J). Až dosud většina vývojářů pracovala s Platformou Azure AD pro vývojáře (v1.0) na ověřování identit Azure AD (pracovních a školních účtů) vyžádáním tokenů pomocí knihovny Azure AD Authentication Library (ADAL).
MSAL nabízí následující výhody:
- Vzhledem k tomu, že používá novější Microsoft identity platform, můžete prostřednictvím Azure AD B2C (Business to Consumer) ověřovat širší sadu identit Microsoftu, jako jsou identity Azure AD, účty Microsoft a sociální a místní účty.
- Vaši uživatelé budou mít nejlepší jednotné přihlašování.
- Vaše aplikace může povolit přírůstkový souhlas a podpora podmíněného přístupu je jednodušší.
KNIHOVNA MSAL pro Javu je knihovna ověřování, kterou doporučujeme používat s Microsoft identity platform. V ADAL4J se nebudou implementovat žádné nové funkce. Veškeré úsilí do budoucna se zaměřuje na vylepšení MSAL.
Můžete se dozvědět více o knihovně MSAL a začít s přehledem knihovny Microsoft Authentication Library.
Rozdíly
Pokud jste pracovali s koncovým bodem Azure AD pro vývojáře (v1.0) (a ADAL4J), možná byste si měli přečíst, co se liší od koncového bodu Microsoft identity platform?.
Obory, ne prostředky
ADAL4J získává tokeny pro prostředky, zatímco MSAL pro Javu získává tokeny pro obory. Řada MSAL pro třídy Java vyžaduje parametr scopes. Tento parametr je seznam řetězců, které deklarují požadovaná oprávnění a prostředky. Příklady oborů Graph v oborech Microsoftu.
K prostředku můžete přidat příponu oboru, která vám pomůže s /.default migrací aplikací z ADAL do MSAL. Například pro hodnotu prostředku https://graph.microsoft.com je ekvivalentní hodnota oboru https://graph.microsoft.com/.default . Pokud prostředek není ve formuláři adresy URL, ale ID prostředku ve formuláři , stále můžete použít XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX hodnotu oboru jako XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX/.default .
Další podrobnosti o různých typech oborů najdete v článcích Oprávnění a souhlas v Microsoft identity platform a Obory pro webové rozhraní API, které přijímá tokeny verze 1.0.
Základní třídy
V ADAL4J třída představuje vaše připojení ke službě tokenů zabezpečení (STS) nebo k autorizačnímu AuthenticationContext serveru prostřednictvím autority. Protokol MSAL pro Javu je ale navržený pro klientské aplikace. Poskytuje dvě samostatné třídy: a PublicClientApplication ConfidentialClientApplication pro reprezentaci klientských aplikací. Druhá, , představuje aplikaci, která je navržená pro zabezpečenou údržbu tajného kódu, jako je ConfidentialClientApplication identifikátor aplikace pro aplikaci démona.
Následující tabulka ukazuje, jak se funkce ADAL4J mapuje na nové funkce MSAL pro Javu:
| Metoda ADAL4J | Metoda MSAL4J |
|---|---|
| acquireToken(prostředek řetězce, přihlašovací údaje ClientCredential, zpětné volání AuthenticationCallback) | acquireToken(ClientCredentialParameters) |
| acquireToken (prostředek řetězce, kontrolní výraz ClientAssertion, zpětné volání AuthenticationCallback) | acquireToken(ClientCredentialParameters) |
| acquireToken(prostředek řetězce, přihlašovací údaje AsymmetricKeyCredential, zpětné volání AuthenticationCallback) | acquireToken(ClientCredentialParameters) |
| acquireToken(Prostředek řetězce, Id klienta řetězce, Uživatelské jméno řetězce, Heslo řetězce, Zpětné volání AuthenticationCallback) | acquireToken(UsernamePasswordParameters) |
| acquireToken(String resource, String clientId, String username, String password=null, AuthenticationCallback callback) | acquireToken(IntegratedWindowsAuthenticationParameters) |
| acquireToken (prostředek řetězce, UserAssertion userAssertion, přihlašovací údaje ClientCredential, zpětné volání AuthenticationCallback) | acquireToken(OnBehalfOfParameters) |
| acquireTokenByAuthorizationCode() | acquireToken(AuthorizationCodeParameters) |
| acquireDeviceCode() a acquireTokenByDeviceCode() | acquireToken(DeviceCodeParameters) |
| acquireTokenByRefreshToken() | acquireTokenSilently(SilentParameters) |
IAccount místo IUser
Uživatelé s ADAL4J manipulovali. I když uživatel představuje jednoho lidského nebo softwarového agenta, může mít jeden nebo více účtů v systému identit Microsoftu. Uživatel může mít například několik osobních účtů Azure AD, Azure AD B2C nebo Microsoft.
MSAL pro Javu definuje koncept účtu prostřednictvím IAccount rozhraní . Jedná se o rozbíjnoucí změnu od ADAL4J, ale je to dobrá změna, protože zachycuje skutečnost, že stejný uživatel může mít několik účtů, a možná i v různých adresářích Azure AD. MsAL pro Javu poskytuje lepší informace ve scénářích hosta, protože jsou k dispozici informace o domovském účtu.
Trvalost mezipaměti
ADAL4J nepodporuje mezipaměť tokenů. MSAL pro Javu přidává mezipaměť tokenů, která zjednodušuje správu životnosti tokenů tím, že pokud je to možné, automaticky aktualizuje tokeny s vypršenou platností a zabraňuje zbytečným výzvám uživatele k zadání přihlašovacích údajů, pokud je to možné.
Společná autorita
Pokud ve v1.0 používáte autoritu, uživatelé se mohou přihlásit pomocí libovolného https://login.microsoftonline.com/common účtu Azure Active Directory (AAD) (pro libovolnou organizaci).
Pokud používáte autoritu ve v2.0, uživatelé se mohou přihlásit pomocí libovolné AAD organizace nebo dokonce osobního účtu https://login.microsoftonline.com/common Microsoft (MSA). Pokud chcete v MSAL pro Javu omezit přihlášení na jakýkoli účet AAD, použijte autoritu (což je stejné chování jako u https://login.microsoftonline.com/organizations ADAL4J). Pokud chcete určit autoritu, nastavte při vytváření třídy parametr v metodě authority PublicClientApplication.Builder. PublicClientApplication
Tokeny v1.0 a v2.0
Koncový bod v1.0 (používaný ADAL) vysílá pouze tokeny v1.0.
Koncový bod v2.0 (používaný protokolem MSAL) může generovat tokeny v1.0 a v2.0. Vlastnost manifestu aplikace webového rozhraní API umožňuje vývojářům zvolit, která verze tokenu je přijata. Viz accessTokenAcceptedVersion referenční dokumentace manifestu aplikace.
Další informace o tokenech v1.0 a v2.0 najdete v Azure Active Directory tokeny.
Migrace Z ADAL do MSAL
V ADAL4J byly zpřístupněny obnovovací tokeny, které vývojářům umožnily jejich ukládání do mezipaměti. Potom by pomocí nástroje umožnili řešení, jako je implementace dlouhotrvatelých služeb, které aktualizují řídicí panely jménem uživatele, když už AcquireTokenByRefreshToken() uživatel není připojený.
MSAL pro Javu nevystavuje obnovovací tokeny z bezpečnostních důvodů. Místo toho msal zpracovává aktualizace tokenů za vás.
MSAL pro Javu má rozhraní API, které umožňuje migrovat obnovovací tokeny, které jste získali pomocí knihovny ADAL4j, do třídy ClientApplication: acquireToken(RefreshTokenParameters). Pomocí této metody můžete poskytnout dříve použitý obnovovací token spolu s libovolnými obory (prostředky), které si přejete. Obnovovací token se vymění za nový a do mezipaměti pro použití vaší aplikací.
Následující fragment kódu ukazuje kód migrace v důvěrné klientské aplikaci:
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);
Vrátí IAuthenticationResult přístupový token a token ID, zatímco nový obnovovací token je uložený v mezipaměti.
Aplikace teď bude také obsahovat IAccount:
Set<IAccount> accounts = app.getAccounts().join();
Pokud chcete použít tokeny, které jsou teď v mezipaměti, zavolejte:
SilentParameters parameters = SilentParameters.builder(scope, accounts.iterator().next()).build();
IAuthenticationResult result = app.acquireToken(parameters);