Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Context
MSAL4J provádí zjišťování instancí před jakýmikoli voláními rozhraní API acquireToken() nebo GetAccount(). Požadavek se používá k získání koncového bodu metadat OpenId a aliasů autorit používaných v mezipaměti tokenů mimo jiné (tyto podrobnosti nejsou důležité, protože MSAL4J je abstrahuje od vývojářů).
MSAL4J ukládá tato metadata do mezipaměti v paměti, aby nebylo nutné pokaždé provádět toto síťové volání. V tomto scénáři první volání rozhraní API provede požadavek na síť, data se uloží do mezipaměti a služba MSAL bude nadále používat data uložená v mezipaměti po celou dobu trvání procesu.
Ve scénářích, kdy aplikace vytvoří nový proces pro každou operaci (například v některých nástrojích rozhraní příkazového řádku), nejsou v mezipaměti v paměti k dispozici žádná data zjišťování instancí dat a knihovna bude vždy muset provést síťové volání. U některých aplikací může být toto chování nežádoucí z důvodů výkonu, konkrétně v případě, že aplikace volá acquireTokenSilently() nebo getAccounts(), kde jsou tokeny nebo účty již v klientovi, a proto požadavek na zjišťování instance je největším zdrojem latence.
Workaround
Pokud máte aplikaci, pro kterou je tento scénář relevantní, můžete nyní při vytváření objektu klientské aplikace MSAL4J předat data odpovědi ze zjištění instance. MSAL4J použije tato data místo volání sítě.
Postup:
Proveďte HTTP GET na https://{host}/common/discovery/instance?api-version=1.1&authorization_endpoint={authorizeEndpoint}
{host} – hostitel vaší autority. Například login.microsoftonline.com
{authorizeEndpoint} – Koncový bod autorizace
Příklad: https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize
Tím se vrátí objekt blob ve formátu JSON podobný tomuto:
{
"tenant_discovery_endpoint": "https://login.microsoftonline.com/common/.well-known/openid-configuration",
"api-version": "1.1",
"metadata": [
{
"preferred_network": "login.microsoftonline.com",
"preferred_cache": "login.windows.net",
"aliases": [
"login.microsoftonline.com",
"login.windows.net",
"login.microsoft.com",
"sts.windows.net"
]
},
{
"preferred_network": "login.partner.microsoftonline.cn",
"preferred_cache": "login.partner.microsoftonline.cn",
"aliases": [
"login.partner.microsoftonline.cn",
"login.chinacloudapi.cn"
]
},
{
"preferred_network": "login.microsoftonline.de",
"preferred_cache": "login.microsoftonline.de",
"aliases": [
"login.microsoftonline.de"
]
},
{
"preferred_network": "login.microsoftonline.us",
"preferred_cache": "login.microsoftonline.us",
"aliases": [
"login.microsoftonline.us",
"login.usgovcloudapi.net"
]
},
{
"preferred_network": "login-us.microsoftonline.com",
"preferred_cache": "login-us.microsoftonline.com",
"aliases": [
"login-us.microsoftonline.com"
]
}
]
}
Tyto informace pak můžete uložit a předat je při vytváření objektuPublicClientApplication.ConfidentialClientApplication
String instanceDiscoveryResponse = readResource(
"/aad_instance_discovery_response.json");
PublicClientApplication app = PublicClientApplication.builder("client_id")
.instanceDiscoveryMetadata(instanceDiscoveryResponse)
.build();
Pamatujte si, že:
- Předávaná data musí být platná ve formátu JSON.
- Při použití této funkce zodpovídá zákazník za ukládání dat a jejich aktualizaci odpovídajícím způsobem.
- MSAL už tato data ukládá v mezipaměti. To snižuje latenci pouze ve scénářích, kdy aplikace vytváří nový proces pro každou operaci.