5

Używam poniższego kodu do korzystania z tokenu dostępu JWT z usługi Asp.net Web Api 2.2. Śledziłem this article, aby skonfigurować serwer autoryzacji w usłudze Web Api. Używam RestSharp w kliencie.Jak używać tokena dostępowego JWT i roszczeń użytkownika przy użyciu RestSharp

kod klienta:

  var client = new RestClient(http://localhost:58030); 
      client.Timeout = 30000; 
      var request = new RestRequest(@"/Oauth/Token", Method.POST); 
      request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
      request.AddHeader("grant_type", "password"); 
      request.AddHeader("username", "[email protected]"); 
      request.AddHeader("password", "[email protected]"); 
      IRestResponse response = client.Execute(request); 
      result = response.Content; 

W efekcie dostaję następujący błąd:

{ 
    "error_description":"grant type not supported", 
    "error":"unsupported_grant_type" 
} 
  1. Dlaczego dostaję ten błąd i jak można to naprawić?
  2. Jak uzyskać dostęp do roszczeń, takich jak nazwa użytkownika w kliencie?
  3. Alternatywnie, w jaki sposób mogę użyć modelu tożsamości do korzystania z usługi?

Odpowiedz

-1

To stara sprawa i prawdopodobnie masz implementację już jednak FWIW tutaj jest rozwiązanie, że pracował dla mnie

var client = new RestClient("http://blahblah/"); 
var request = new RestRequest("/token", Method.POST); 
// all parameters need to go in body as string 
var encodedBody = string.Format("username={0}&password={1}&grant_type=password", model.Username, model.Password); 
request.AddParameter("application/x-www-form-urlencoded", encodedBody, ParameterType.RequestBody); 
request.AddParameter("Content-Type", "application/x-www-form-urlencoded", ParameterType.HttpHeader); 
var response = client.Execute(request); 
1

Dodano grant_type, username i password do Header żądania HTTP, powinno być w części Body.