windowsphone restresponse restrequest instalar example consume c# rest curl oauth-2.0 restsharp

c# - restresponse - Cómo usar OAuth2 en RestSharp



restsharp github (2)

Soy capaz de hacer funcionar las dos funciones siguientes.

public RestClient getClient2(string user, string token) { RestClient client = new RestClient(); client.BaseUrl = new Uri(baseUrl); client.Authenticator = new HttpBasicAuthenticator(user, token); //client.Authenticator = new OAuth2UriQueryParameterAuthenticator(token); //works //client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(token); // doesn''t work return client; } public GitHubUser GetGitHubUser2() { RestRequest request = new RestRequest(); request.Resource = "/users/huj"; request.RootElement = "GitHubUser"; RestClient client = getClient2(myUser, myToken); return Execute<GitHubUser>(client, request); } /// <summary> /// http://stackoverflow.com/questions/30133937/how-to-use-oauth2-in-restsharp /// </summary> /// <returns>GitHubUser</returns> public GitHubUser GetGitHubUser3() { //RestRequest request = new RestRequest(Method.POST); //empty data RestRequest request = new RestRequest(); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Accept", "application/json"); request.AddParameter("grant_type", "client_credentials"); request.Resource = "/users/huj"; request.RootElement = "GitHubUser"; RestClient client = getClient2(myUser, myToken); return Execute<GitHubUser>(client, request); }

Después de un par de días clasificando OAuth2 en el servidor (Spring Java) comencé a trabajar en el cliente escrito en C #. Estoy usando RestSharp para llamar a mi API web pero tengo una verdadera dificultad con OAuth2. Casi no hay documentación y los pocos ejemplos que encontré en línea no funcionan. ¿Puede alguien proporcionarme un ejemplo de código que esté actualizado y que yo pueda usar?

Hasta ahora tengo lo siguiente:

var client = new RestClient("http://example.com/myapi/oauth/token"); RestRequest request = new RestRequest() { Method = Method.POST }; request.AddHeader("Content-Type", "application/json"); request.AddParameter("grant_type", "client_credentials"); request.AddParameter("client_id", "client-app"); request.AddParameter("client_secret", "secret"); var response = client.Execute(request);

Simplemente estoy ejecutando este código en modo de depuración y cuando veo la respuesta, no estoy autorizado.

Cuando hago curl en la consola con los mismos parámetros, funciona bien, pero parece que no puedo hacer que esto funcione en C #. Aquí está el comando curl:

curl -H "Accept: application/json" client-app:[email protected]/myapi/oauth/token -d grant_type=client_credentials

Por cierto, he reemplazado mis URL verdaderas de API y otra información con marcadores de posición.


Ver RFC 6749 - 4.4.2. Credenciales del cliente - Solicitud de token de acceso

Aquí está el formato básico de la solicitud.

POST /token HTTP/1.1 Host: server.example.com Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded grant_type=client_credentials

Su solicitud de cURL

curl -H "Accept: application/json" / -d grant_type=client_credentials / client-app:[email protected]/myapi/oauth/token

La razón por la que funciona tu comando cURL

  1. El tipo de Content-Type predeterminado (si no se especifica) con POST (el valor predeterminado cuando usa el -d ) es application/x-www-form-urlencoded
  2. El tipo de autenticación predeterminado, si no se especifica, es Basic . El nombre de usuario y la contraseña se pasan a través de la opción -u o en la URL

    -u username:password (client-app:secret) -- or put it in the url -- client-app:[email protected]/myapi/oauth/token

    También puede especificar el tipo de autenticación con --basic o --digest

Puede usar el -v en su comando cURL para ver todos los encabezados involucrados en la solicitud.

Solución RestSharp :

  1. Establezca el tipo de Content-Type en application/x-www-form-urlencoded

  2. Agrega la autenticación básica

    client.Authenticator = new HttpBasicAuthenticator("client-app", "secret");

  3. Deshacerse de

    request.AddParameter("client_id", "client-app"); request.AddParameter("client_secret", "secret");

  4. Establezca el encabezado Accept en application/json