Vytváření služeb, které jsou odolné vůči OpenID id Microsoft Entra Připojení aktualizace metadat
Chráněná webová rozhraní API potřebují ověřovat přístupové tokeny. Webové aplikace také ověřují tokeny ID. Ověření tokenu má více částí a kontroluje, jestli token patří do aplikace, byl vydán důvěryhodným zprostředkovatelem identity (IDP), má životnost, která je stále v rozsahu a nebyla manipulována. Můžou existovat také speciální ověření. Aplikace musí například ověřit podpis a že podpisové klíče (pokud jsou vložené do tokenu) důvěryhodné a že se token nepřehrává. Pokud podpisové klíče nejsou vložené do tokenu, je potřeba je načíst ze zprostředkovatele identity (zjišťování nebo metadata). Někdy je také nutné dynamicky získávat klíče za běhu.
Webové aplikace a webová rozhraní API musí aktualizovat zastaralé OpenID Připojení metadata, aby byly odolné. Tento článek vám pomůže s tím, jak dosáhnout odolných aplikací. Platí pro ASP.NET Core, ASP.NET a Microsoft.IdentityModel.
ASP.NET Core
Použijte nejnovější verzi Microsoft.IdentityModel.* a ručně postupujte podle následujících pokynů.
ConfigureServices
V metodě Startup.cs se ujistěte, že JwtBearerOptions.RefreshOnIssuerKeyNotFound
je nastavená hodnota true a že používáte nejnovější knihovnu Microsoft.IdentityModel.*. Tato vlastnost by měla být ve výchozím nastavení povolená.
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
…
// shouldn’t be necessary as it’s true by default
options.RefreshOnIssuerKeyNotFound = true;
…
});
ASP.NET/ OWIN
Microsoft doporučuje přejít na ASP.NET Core, protože vývoj se zastavil na ASP.NET.
Pokud používáte ASP.NET (Classic), použijte nejnovější Microsoft.IdentityModel.*.
OWIN má automatický 24hodinový interval aktualizace pro OpenIdConnectConfiguration
. Tato aktualizace se aktivuje pouze v případě, že se žádost obdrží po uplynutí 24hodinového časového období. Pokud to víme, neexistuje žádný způsob, jak tuto hodnotu změnit nebo aktivovat aktualizaci v rané fázi, a to kromě restartování aplikace.
Microsoft.IdentityModel
Pokud token ověříte sami, například ve funkci Azure Functions, použijte nejnovější verzi Microsoft.IdentityModel.* a postupujte podle pokynů k metadatům, které jsou znázorněny níže postupem fragmentů kódu.
var configManager =
new ConfigurationManager<OpenIdConnectConfiguration>(
"http://someaddress.com",
new OpenIdConnectConfigurationRetriever());
var config = await configManager.GetConfigurationAsync().ConfigureAwait(false);
var validationParameters = new TokenValidationParameters()
{
…
IssuerSigningKeys = config.SigningKeys;
…
}
var tokenHandler = new JsonWebTokenHandler();
result = Handler.ValidateToken(jwtToken, validationParameters);
if (result.Exception != null && result.Exception is SecurityTokenSignatureKeyNotFoundException)
{
configManager.RequestRefresh();
config = await configManager.GetConfigurationAsync().ConfigureAwait(false);
validationParameters = new TokenValidationParameters()
{
…
IssuerSigningKeys = config.SigningKeys,
…
};
// attempt to validate token again after refresh
result = Handler.ValidateToken(jwtToken, validationParameters);
}
Další kroky
Další informace najdete v tématu Ověření tokenu v chráněném webovém rozhraní API.