2017-06-09 3 views
1

Hilfe bei der Authentifizierung der Token-Anfrage von jeder Client-Anwendung auf WEB API. Wir haben registriert, dass unsere Web-API eine Multi-Tenant-Anwendung in Azure AAD hat. Meine Clientanwendung, die in einem anderen Mandanten registriert wurde, konnte Zugriffstoken von AAD abrufen. Während die Http-Anforderung an unseren Endpunkt mit Übergabe des Zugriffstokenabschnitts des Anforderungsheaders gesendet wird, erhalten wir eine nicht autorisierte Ausnahme 401. Ich fand Grund beim Browsen für Multi-Tenant-Szenario ist ValidateIssuer deaktivieren und benutzerdefinierte Handler haben.401 unauthorize Ausnahme für multitenant Web API

• Gibt es einen benutzerdefinierten Handler für die Implementierung von WindowsAzureActiveDirectoryBearerAuthentication. Ich sehe, dass Leute OpenIDConnect benutzen. Aber für WEB-API verwenden wir WindowsAzureActiveDirectoryBearerAuthentication, d. H. Gibt es ein äquivalentes Ereignis für die Überprüfung des Zugriffstokens in UseWindowsAzureActiveDirectoryBearerAuthentication und sagen Benutzer authentifiziert?

• Gibt es einen besseren Standard für die Validierung des Zugriffstokens und teilt dem Benutzer mit, dass er ein gültiger Benutzer ist?

• Können wir die Ansprüche des Benutzers erhalten, indem Sie das Bearer-Token an den WEBAPI Authorize-Filter übergeben? oder erhalten httprequest Objektansprüche Benutzerinformationen wie Vorname, Name des Mieters, Objekt-ID (insbesondere Localhost-Debugging-Szenario auch.), Wenn wir diese Informationen erhalten können, können wir unsere eigene Logik der Validierung haben.

Bitte lassen Sie uns wissen, ob dieser Ansatz die beste Vorgehensweise für die Authentifizierung eines Benutzers ist.

Antwort

0

Sie könnten einen benutzerdefinierten Issuer-Validator implementieren und ihn der IssuerValidator-Eigenschaft zuweisen. Dies ist nützlich, wenn Sie nicht eine vordefinierte Liste von Emittenten in Konfiguration und müssen einige Laufzeitlogik angeben können, um festzustellen, ob Sie die Emittenten im Token präsentiert vertrauen:

TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters 
{ 
     IssuerValidator = (issuer, token, tvp) => 
     { 

      if (db.Issuers.FirstOrDefault(b => (b.Issuer == issuer)) == null) 
       return issuer; 
      else 
       throw new SecurityTokenInvalidIssuerException("Invalid issuer"); 
     } 
} 

Sie konnten die Zugriffstoken dekodieren Grund Benutzer zu erhalten Informationen wie family_name/given_name, aber Sie können nur erhalten, indem Sie die Benutzeridentität verwenden, um das Zugriffstoken zu erhalten.

Verwandte Themen