1

Also ich baute eine benutzerdefinierte Web-API in ASP.NET Core, die nach Rolle autorisiert ist. Was wäre die korrekte Methode, um diese API in anderen Core-Web-Apps zu verwenden? Wie kann ich eine Anwendung zur Verwendung einer API autorisieren?Wie wird eine benutzerdefinierte, autorisierte ASP.NET Core Web-API in anderen Core-Webanwendungen verwendet?

Edit: Ein wenig mehr Details auf, was ich zu tun werde versuchen:

Also lassen Sie uns sagen, dass ich eine Berechtigungspolitik. In meiner separaten Web-API-Anwendung erkläre ich diese Richtlinie im Startup und autorisiere einige API-Methoden. Es funktioniert und wird jetzt auf "webapi.foo.com" gehostet, großartig. Nehmen wir an, ich erstelle eine neue, separate Web-App und möchte eine Methode aus dieser API verwenden. Also meine Frage ist zweifach: Wie rufe ich diese Methoden auf "webapi.foo.com"? Und wie stelle ich sicher, dass meine App berechtigt ist, diese autorisierten Methoden aufzurufen?

+0

"Wie soll ich mich über einen Antrag zur Genehmigung eines API zu verwenden?" ist eine breite Frage. Es gibt entweder zu viele mögliche Antworten oder gute Antworten wären zu lang für dieses Format. Bitte fügen Sie Details hinzu, um die Antwortmenge einzuschränken oder ein Problem zu isolieren, das in einigen Absätzen beantwortet werden kann. –

+0

Ich antwortete jemand anderem mit diesem. Hoffentlich schmälert sich das ein wenig: Also lassen Sie uns Ihr Beispiel für die Autorisierung von Richtlinien verwenden. In meiner separaten Web-API-Anwendung erkläre ich diese Richtlinie im Startup und autorisiere einige API-Methoden. Es funktioniert und wird jetzt auf "webapi.foo.com" gehostet, großartig. Nehmen wir an, ich erstelle eine neue, separate Web-App und möchte eine Methode aus dieser API verwenden. Also meine Frage ist zweifach: Wie rufe ich diese Methoden auf "webapi.foo.com"? Und wie stelle ich sicher, dass meine App berechtigt ist, diese autorisierten Methoden aufzurufen? – Daath

+2

Wenn Sie die Entwicklung vieler Web-Apps vorhersehen, die in einem autorisierten Framework miteinander kommunizieren müssen, würden Sie davon profitieren, eine Web-App zu entwickeln, die nur die Autorisierungsverwaltung für Ihre anderen Web-Apps oder einen Identity Provider übernimmt. Sie könnten ein Autorisierungs-Token oder HMAC oder einen anderen Mechanismus implementieren, der Ihnen dieselbe Funktionalität bietet. – boosts

Antwort

2

Authorization ich dies mit Json Web Tokens (JWTs) und Bearer-Authentifizierung, indem die Front-End-System erreicht (Webapp .foo.com) ruft eine Login-Methode auf der Backend-API (api.foo.com) auf. Die Anmeldemethode unter api.foo.com authentifiziert den Benutzer und gibt einen JWT in seiner Antwort aus. webapp.foo.com verwendet dann diesen JWT, um Aktionen auf seinen Controllern zu authentifizieren (indem er eine Autorisierungsrichtlinie definiert, die die Ansprüche des Token verwendet) und das Token auch an foo.api.com weitergibt, wenn es dort einen Anruf tätigt. Sowohl webapp.foo.com als auch api.foo.com müssen lediglich ihre Autorisierungsrichtlinien auf der Grundlage der Anspruchsgruppe des JWT erstellen und dann die Verwendung des Tokens freigeben.

Aufruf api.foo.com

  string jwt = xxx.yyy.zzz; //use the actual JWT returned from your login call 
     var client = new HttpClient("http://api.foo.com"); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwt); //add the JWT to the authorization header 
     var requestStr = JsonConvert.SerializeObject(new { myParam = viewModel.myParam }); //serialize the object you are passing as a parameter to api.foo.com as Json 
     HttpContent requestBody = new StringContent(requestStr, Encoding.UTF8, "application/json"); 
     var response = await client.PostAsync("myController\\myAction", requestBody); //POST to api.foo.com (or whatever action you want to take) 
     response.EnsureSuccessStatusCode(); 

     var resultstr = response.Content.ReadAsStringAsync().Result; //read the result as a string 
     dynamic resultObj = JsonConvert.DeserializeObject<dynamic>(resultstr); //if desired, deserialize it to an object (I just used dynamic as an example) 
+0

Danke !! Genau das, was ich gesucht habe. – Daath

0

Nicht 100% sicher, wenn ich Ihre Frage richtig verstehe.

Wenn Sie die Controller/Aktionen mit einem AuthorizeAttribute versehen, das eine benannte Richtlinie verwendet, können Webanwendungen, die Ihre Controllerbibliothek verwenden, die benannte Richtlinie beim Start definieren und konfigurieren, welche Rollen oder Ansprüche oder andere Anforderungen den Zugriff erlauben.

[Authorize(Policy = "SystemLogPolicy")] 

Start Beispiel:

services.AddAuthorization(options => 
{ 
    options.AddPolicy(
     "SystemLogPolicy", 
     authBuilder => 
     { 
      authBuilder.RequireRole("ServerAdmins"); 
     }); 
} 

siehe auch docs on authorization

+0

Hmmm, ich hätte im OP klarer sein sollen. Lassen Sie uns das Beispiel für die Richtlinienautorisierung verwenden.In meiner separaten Web-API-Anwendung erkläre ich diese Richtlinie im Startup und autorisiere einige API-Methoden. Es funktioniert und wird jetzt auf "webapi.foo.com" gehostet, großartig. Nehmen wir an, ich erstelle eine neue, separate Web-App und möchte eine Methode aus dieser API verwenden. Also meine Frage ist zweifach: Wie rufe ich diese Methoden auf "webapi.foo.com"? Und wie stelle ich sicher, dass meine App berechtigt ist, diese autorisierten Methoden aufzurufen? – Daath

+0

Ich denke, dass Sie Ihre Frage redigieren sollten, um es klarer zu machen, scheint, dass Sie vielleicht in jwt schauen sollten –

Verwandte Themen