Sdílet prostřednictvím


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.