2017-08-10 3 views
0

Ich versuche, eine Anfrage an einen geschützten API zu machen, so brauche ich eine Genehmigung Request-Header zu Httpclient wie folgt hinzuzufügen:Wie bekomme ich JWTToken vom ASPNET Core Controller?

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token"); 

Aber wie das Authentifizierungstoken („Ihr OAuth-Token“) zu erhalten von einem Controller?

PS: Ich bin bereits für Identity Server 4 authentifiziert. Anwendung in AspNetCore entwickelt.

Voll Code:

[Authorize] //Already authenticated 
    public IActionResult SomeControllerAction() 
    { 
     var claimsIdentity = User.Identity as ClaimsIdentity; //where is JWTToken?? 
     var JWTTokne = "how to get?"; 

     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", JWTTokne); 
      var result = client.PostAsync("someurl", new StringContent(json, Encoding.UTF8, "application/json")).Result; 
      //more code to handle result.... 
     } 

     return View(); 
    } 
+0

ist, dass ein Controller-Aktion [Autorisierte] eine? IOW ist der Controller, der mit einem Client aufgerufen wird, der den Berechtigungsheader in der Anforderung gesendet hat? – Lutando

+0

Ja, es ist eine bereits authentifizierte Aktion autorisiert. – user1203003

Antwort

1

Sie im HTTP-Kontext aussehen kann, da Sie in einem Controller sind, können Sie nur das Token aus dem Header bei HttpContext.Request.Headers["Authorization"] bekommen. Dies funktioniert natürlich nur, wenn der Client diesen Header in die Anfrage gestellt hat.

2

können Sie die Zugriffstoken erhalten, indem Sie:

// Get the access token. 
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 

var client = new HttpClient(); 

// Set the access token as the bearer token (Authorization header of the request). 

client.SetBearerToken(accessToken); 
0

Kern

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 

Für access_token in MVC 5-Controller verwendet I

var token = (User as ClaimsPrincipal).FindFirst("access_token").Value 

Im geschützten Web-api 2 (nicht Kern) Methode, die ich verwendete

var access_token = ControllerContext.Request.Headers.Authorization.Parameter; 
0

Mit AspNet Core 2.0 und dem neuen Authentifizierungssystem verwenden Sie einfach die Erweiterungsmethoden von HttpContext.

HttpContext context; 
await context.GetTokenAsync("access_token") 

und in einem MVC-Controller

public class MyController : Controller 
{ 
    public IActionResult Get(){ 
     var token = await HttpContext.GetTokenAsync("access_token"); 

    } 

} 
Verwandte Themen