0

Ich verwende Windows Azure Active Directory-Authentifizierung. Dies wird verwendet, um eine C# Windows-Dienst zu sichern, die API-Service aC# Web in Azure.It Anrufe hat seit geraumer Zeit gearbeitet, aber jetzt habe ich begonnen erhalte die folgende Ausnahme:Windows Azure Active Directory-Authentifizierung Ausnahme

Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware Error: 0 : Authentication failed 
System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: 'SecurityKeyIdentifier 
(
    IsReadOnly = False, 
    Count = 2, 
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x61B44041161C13F9A8B56549287AF02C16DDFFDB), 
    Clause[1] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause 
) 

Ich habe keine Ahnung, was diese bedeutet oder wie man es beheben :(

aktualisiert

In Antwort auf den Kommentar über Key-Rollover meines Web-Service wird mit dem folgenden Code:

private void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
     new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
     { 
      TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters 
      { 
       ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] 
      }, 
      Tenant = ConfigurationManager.AppSettings["ida:Tenant"] 
     }); 
} 

was laut diesem Link bedeutet, dass es gegen diese Art von Problem gesichert sein sollte.

Der Start des Token sieht das Kind darunter wie folgt aus:

token: '{"typ":"JWT","alg":"RS256","x5t":"YbRAQRYcE_motWVJKHrwLBbd_9s","kid":"YbRAQRYcE_motWVJKHrwLBbd_9s"} 

Update 2

Mein Code Token im Windows-Dienst zu erwerben:

internal string GetAuthorizationToken() 
    { 
     string authority = String.Format(aadInstance, tenant); 
     var authContext = new AuthenticationContext(authority); 

     var authResult = AcquireToken(authContext); 

     return authResult == null ? null : authResult.CreateAuthorizationHeader(); 
    } 

    /// <summary> 
    /// Acquires the token. 
    /// </summary> 
    /// <param name="authContext">The authentication context.</param> 
    /// <returns>Authentication Result</returns> 
    private AuthenticationResult AcquireToken(AuthenticationContext authContext) 
    { 
     try 
     { 

      return authContext.AcquireTokenAsync(apiResourceId, clientId, new UserPasswordCredential(user, pass)).Result; 
     } 
     catch (Exception) 
     { 
      return null; 
     } 
    } 
+0

könnte dies zu diesem https://docs.microsoft.com/en-us/azure/active-directory/active-directory-signing-key-rollover verwandt werden? – 4c74356b41

Antwort

0

Diese Ausnahme würde auftreten, wenn die Anwendung versucht, den Signaturschlüssel über die Schlüsselidentität im Token von Azure zu finden, jedoch den Schlüssel bereits in Azure y Rollover.

Bitte besorgen Sie sich ein neues Zugriffs-Token im Windows-Dienst, um dieses Problem zu beheben.

+0

Der Dienst erhält jedoch jedes Mal einen neuen Schlüssel, wenn er den Webdienst kontaktiert. – DasDave

+0

Würde es Ihnen etwas ausmachen, den Token mit ** Fiddler ** zu erfassen und über [hier] zu decodieren (https://jwt.io/)? Was ist der Wert von "Kid" im Token? –

+0

Hinzugefügt zu meinem ursprünglichen Post Fei und interessanterweise, wenn ich das Werkzeug benutze, das du auch verknüpfst, sagt es auch ungültige Signatur. – DasDave

Verwandte Themen