2016-04-07 8 views
0

Ich entwickle derzeit eine API mit ASP.NET in C#.Best Practice: Benutzeridentitäten als Parameter?

Ein Endpunkt muss einen anderen aufrufen, um einen Wert zurückzugeben.

public class Testcontroller : BaseApiController 
{ 
    [Authorize] 
    [HttpGet] 
    [Route("1", Name = "F1")] 
    public async Task<IHttpActionResult> F1() 
    { 
     return await F2(); // calls 2nd method 
    } 

    [Authorize] 
    [HttpGet] 
    [Route("2", Name = "F2")] 
    public async Task<IHttpActionResult> F2() 
    { 
     int I = 2; 
     return Ok(I.ToString()); 
    } 
} 

Ok, der zurückgegebene Wert dieser ganzen Sache wird 2 sein, was absolut in Ordnung ist. In der echten API müssen die zweiten Methoden jedoch einige Daten über den Benutzer abrufen. Das wird in der Regel behandelt mit

var Name = ClaimsPrincipal.Current.Identity.Name; 
var CurrentUser = await this.AppUserManager.FindByNameAsync(Name); 

Diese zwei Linien, die die Benutzerinformationen durch die Inhaber-Token erhalten, das heißt auf das Verfahren durch den Autorisierungsvorgang übergeben.

In Anbetracht dessen könnte die erste Funktion die andere aufrufen. Der Nachteil ist, dass diese beiden LOCs für die Benutzerdaten nicht funktionieren, weil dieses Token nicht ordnungsgemäß übergeben wird.

Wie würden Sie vorschlagen, dieses Problem zu umgehen? Ich überlegte, ob ich einen optionalen Parameter hinzufügen und den CurrentUser durchreichen könnte. Aber ich dachte, das könnte zu Sicherheitsproblemen führen.

Danke für Ihre Hilfe!

Antwort

1

Verwenden Sie zunächst nicht ClaimsPrincipal.Current. In Controllern haben Sie eine Benutzereigenschaft, in der sich die Identität befindet. ClaimsPrincipal.Current ist ein Hangover von .NET 3.5. Wenn Sie zu .NET Core wechseln, ist die Eigenschaft "Benutzer" der richtige Weg.

Als Antwort auf Ihre eigentliche Frage gibt es keine Sicherheitsprobleme bei der Weitergabe an andere Funktionen außerhalb Ihres Controllers.

+0

Okay, danke, dann werde ich versuchen, es als zusätzlichen Parameter zu implementieren. Ich habe die User-Eigenschaft ausprobiert, konnte aber keine Möglichkeit finden, die eigentliche userId zu erhalten, mit der sich der Benutzer in der DB befindet. Wie würdest du das machen? –

+0

https://stackoverflow.com/questions/22624470/get-current-user-id-in-asp-net-identity-2-0 Adressen, dass :) – blowdart

+0

Großartig, danke für die Hilfe mich da draußen :) –