2017-06-07 2 views
1

Ich habe einen ASP.Net Web-API-2, auf das ich die folgenden Sicherheits umgesetzt zu konsumieren: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapi-dotnetVerwenden MSAL Auth-Token Web API 2

Es funktionierte, kann ich nicht auf den Controller zugreifen, außer wenn ich das entfernen [Autorisieren] -Attribut.

Jetzt habe ich einen angemeldeten Benutzer in einer Xamarin App. Der Benutzer ist über die MSAL-Authentifizierung angemeldet, was auch gut funktioniert. Sehr einfache Implementierung:

var authenticationResult = await App.IdentityClientApp.AcquireTokenSilentAsync(App.ClientScope); 
var token = authenticationResult.Token; 

Jetzt will ich durch die Web-API für den Zugriff auf die MSAL Authentifizierungs-Token in den DefaultRequestHeaders mit so etwas wie dieses geben:

this.httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 

Gibt es trotzdem ist dies möglich? Wie kann ich diesen Token verwenden, um meinen Nutzer dazu zu bringen, meine Web-API zu nutzen?

Vielen Dank!

Antwort

3

Das Tutorial Help protect a web API by using bearer tokens from Azure AD Sie erwähnt Ziele auf AD v1.0 und Sie müssen Ihre Anwendungen auf Azure Portal registrieren. Während MSAL Ziele auf AD v2.0 und müssen Sie Ihre App bei apps.dev.microsoft.com registrieren, und Sie müssen die Middleware in Ihrem Web-API-2 wie folgt verwenden:

var tvps = new TokenValidationParameters 
{ 
    ValidAudience = clientId, 
    ValidateIssuer = false, 
}; 

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions 
{ 
    AccessTokenFormat = new Microsoft.Owin.Security.Jwt.JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider("https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration")) 
}); 

Weitere Informationen Sie finden könnten active-directory-v2-devquickstarts-dotnet-api.

Zusätzlich können Sie für Code-Beispiele über das Web-API-Backend und den mobilen Client über MSAL auf das Web-API-Backend auf AppModelv2-WebAPI-DotNet verweisen.

Update:

  • Ich habe das Codebeispiel AppModelv2-WebAPI-DotNet

  • Follow How to register an app with the v2.0 endpoint für meine App für v2 Registrierung.0 wie folgt:

    enter image description here

  • Kopieren Sie die Anwendungs-ID aus dem obigen Screenshot und aktualisieren es TodoListClient und TodoListService Projekt wie folgt:

    enter image description here

  • Einführung TodoListService zuerst, dann Sie debuggen könnte TodoListService wie folgt:

    enter image description here

Auch Sie Token und nutzen Postbote kopieren könnte die Anforderung zu simulieren, wie folgt:

enter image description here

+0

Danke für die Antwort, ich habe das Beispielprojekt als Leitfaden verwendet, um die von Ihnen beschriebene Vorgehensweise zu implementieren. Ich markiere deine Antwort, sobald ich eine andere Nachricht bekomme als "{" $ id ":" 1 "," Nachricht ":" Die Autorisierung wurde für diese Anfrage abgelehnt. "}". Danke! –

+0

Ich habe meine Antwort aktualisiert, Sie könnten sich darauf beziehen. –

+0

Vielen Dank für das komplette Update! Ich versuche gerade, das an meinem Projekt zu arbeiten, jetzt, wo es an der Probe gearbeitet hat. –