Udostępnij za pośrednictwem


Usługi kompilacji, które są odporne na odświeżanie metadanych Połączenie identyfikator openID firmy Microsoft

Chronione internetowe interfejsy API muszą weryfikować tokeny dostępu. Aplikacje internetowe weryfikują również tokeny identyfikatorów. Weryfikacja tokenu ma wiele części, sprawdzając, czy token należy do aplikacji, został wystawiony przez zaufanego dostawcę tożsamości (IDP), ma okres istnienia, który jest nadal w zakresie i nie został naruszony. Mogą również istnieć specjalne weryfikacje. Na przykład aplikacja musi zweryfikować podpis i że klucze podpisywania (gdy są osadzone w tokenie) są zaufane i że token nie jest odtwarzany. Jeśli klucze podpisywania nie są osadzone w tokenie, należy pobrać je z dostawcy tożsamości (odnajdywanie lub metadane). Czasami konieczne jest również dynamiczne uzyskiwanie kluczy w czasie wykonywania.

Aplikacje internetowe i internetowe interfejsy API muszą odświeżać nieaktualne identyfikatory OpenID Połączenie metadane, aby były odporne. W tym artykule opisano sposób uzyskiwania odpornych aplikacji. Dotyczy ASP.NET Core, ASP.NET i Microsoft.IdentityModel.

ASP.NET Core

Użyj najnowszej wersji programu Microsoft.IdentityModel.* i ręcznie postępuj zgodnie z poniższymi wskazówkami.

ConfigureServices W metodzie Startup.cs upewnij się, że JwtBearerOptions.RefreshOnIssuerKeyNotFound ustawiono wartość true i że używasz najnowszej biblioteki Microsoft.IdentityModel.*. Ta właściwość powinna być domyślnie włączona.

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    …
    // shouldn’t be necessary as it’s true by default
    options.RefreshOnIssuerKeyNotFound = true;
    …
});

ASP.NET/ OWIN

Firma Microsoft zaleca przejście do ASP.NET Core, ponieważ programowanie zostało zatrzymane w ASP.NET.

Jeśli używasz ASP.NET (wersja klasyczna), użyj najnowszej wersji Microsoft.IdentityModel.*.

OWIN ma automatyczny 24-godzinny interwał odświeżania dla elementu OpenIdConnectConfiguration. To odświeżanie zostanie wyzwolone tylko wtedy, gdy żądanie zostanie odebrane po upływie 24-godzinnego przedziału czasu. O ile wiemy, nie ma możliwości zmiany tej wartości ani wcześniejszego wyzwolenia odświeżania, oprócz ponownego uruchomienia aplikacji.

Microsoft.IdentityModel

Jeśli samodzielnie zweryfikujesz token, na przykład w funkcji platformy Azure użyj najnowszej wersji programu Microsoft.IdentityModel.* i postępuj zgodnie ze wskazówkami dotyczącymi metadanych przedstawionymi poniżej fragmentami kodu.

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);
}

Następne kroki

Aby dowiedzieć się więcej, zobacz walidację tokenu w chronionym internetowym interfejsie API