Member 14779968 Ответов: 1

Как получить маркер учетных данных пароля типа 0auth grand с помощью httpwebrequest?


Я создал метод, чтобы получить токен. Мой запрос токена отправляет параметры в виде application/x-www-form-urlencoded. Он принимает учетные данные в качестве форм-данных. Когда я получаю токен, я хочу использовать его в своем методе Send request, где я определил свой параметр string token. Как передать все учетные данные в моем методе getAccessToken??

grant_type = пароль
username = имя пользователя
пароль = пропуск
объем = объем
client_id = клиент
client_secret = api




private string SendRequest(HttpWebRequest request, string token, string queryParams)
    {
        HttpWebResponse response = null;
        if(token != null)
        {
            request.Headers.Add("Authorization", "Bearer" + token);

        }

        request.ContentType = "application/json";

        try
        {

            response = (HttpWebResponse)request.GetResponse();

        }
        catch (WebException wex)
        {
            if (wex.Response == null)
                return JSON_ERROR;

            using (var errorResponse = (HttpWebResponse)wex.Response)
            {
                using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                {
                    return reader.ReadToEnd(); //expected error from JSON
                }
            }
        }

        var responseVal = new StreamReader(stream: response.GetResponseStream()).ReadToEnd();

        return responseVal;
    }


Что я уже пробовал:

public static string getAccessToken()
        {

            var httpWebRequest = (HttpWebRequest)WebRequest.Create(
            "http://identity-authority.int-spirion.com/connect/token");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string input = "{}";

                streamWriter.Write(input);
                streamWriter.Flush();
                streamWriter.Close();
            }

            var authResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            string response;

            using (var streamReader = new StreamReader(authResponse.GetResponseStream()))
            {
                response = streamReader.ReadToEnd();
            }

               var authResponseJson = responseHandler.ConvertResponseToJson(authResponse);

             Assert.AreEqual(authResponse.StatusCode, HttpStatusCode.OK);

              string token = authResponseJson["access_token"].ToString();

            return token;
        }

1 Ответов

Рейтинг:
1

Garth J Lancaster

Ответ действительно зависит от поставщика OAuth, но один из возможных способов - отправить имя пользователя и пароль в качестве заголовков IE "Basic Authentication" - что-то вроде этого с помощью HttpWebRequest ....

String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
httpWebRequest.Headers.Add("Authorization", "Basic " + encoded);