Tengo un cliente WPF que usa RestSharp y el servicio WEB API. Intento usar HttpBasicAuthenticator de la siguiente manera:
RestRequest login = new RestRequest("/api/users/login", Method.POST); var authenticator = new HttpBasicAuthenticator("admin","22"); authenticator.Authenticate(Client, login); IRestResponse response = Client.Execute(login);La solicitud POST se ve así:
POST http://localhost/api/users/login HTTP/1.1 Authorization: Basic YWRtaW46MjI= Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml User-Agent: RestSharp/105.1.0.0 Host: dellnote:810 Content-Length: 0 Accept-Encoding: gzip, deflate Connection: Keep-AliveAuthorization: Basic YWRtaW46MjI= en el lado del servidor? ¿Obtengo el nombre de usuario y la contraseña de este encabezado?Necesito obtener una autenticación simple basada en el token de seguridad, pero no puedo encontrar un ejemplo que describa todos los aspectos de este proceso. ¿Puede alguien indicarme algún ejemplo completo que incluya el lado del cliente y del servidor (y use RestSharp)?
new SimpleAuthenticator("username", username, "password", password) NO funcionó conmigo.
Sin embargo, lo siguiente funcionó:
var client = new RestClient("http://example.com"); client.Authenticator = new HttpBasicAuthenticator(userName, password); var request = new RestRequest("resource", Method.GET); client.Execute(request);De la documentación de RestSharp:
var client = new RestClient("http://example.com"); client.Authenticator = new SimpleAuthenticator("username", "foo", "password", "bar"); var request = new RestRequest("resource", Method.GET); client.Execute(request);La URL generada para esta solicitud sería http://example.com/resource?username=foo&password=bar
Por lo tanto, obtiene la contraseña como cualquier otro parámetro (aunque se recomienda usar el método POST y luego GET, por razones de seguridad).
En cuanto a las cookies, consulte esto: https://msdn.microsoft.com/en-us/library/system.windows.application.setcookie.aspx
https://msdn.microsoft.com/en-us/library/system.windows.application.getcookie.aspx
Espero eso ayude
Lo siguiente funcionó para mí:
private string GetBearerToken() { var client = new RestClient("http://localhost"); client.Authenticator = new HttpBasicAuthenticator("admin", "22"); var request = new RestRequest("api/users/login", Method.POST); request.AddHeader("content-type", "application/json"); request.AddParameter("application/json", "{ \"grant_type\":\"client_credentials\" }", ParameterType.RequestBody); var responseJson = _client.Execute(request).Content; var token = JsonConvert.DeserializeObject<Dictionary<string, object>>(responseJson)["access_token"].ToString(); if(token.Length == 0) { throw new AuthenticationException("API authentication failed."); } return token; }