Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 44
1

Аутентификация через API сайта

15.08.2016, 14:32. Показов 3052. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

Мне требуется сделать запрос на аутентификаю на сайте с помощью API.

Request
Кликните здесь для просмотра всего текста
POST /api/2.0/authentication.json HTTP/1.1
Host: portal.onlyoffice.com
Accept: application/json,application/xml
Accept-Encoding: gzip, deflate
userName=yourusername&password=yourpassword


Response
Кликните здесь для просмотра всего текста
HTTP/1.1 200 Ok
Cache-Control: private
Content-Type: application/json; charset=utf-8
{
"count": 0,
"startIndex": 0,
"status": 0,
"response": {
"token": "sdjhfskjdhkqy739459234",
"expires": "2013-01-13T16:35:42.7564317+04:00"
}
}


Я понимаю, что требуется отправить POST запрос и потом получить ответ, сохранив token, но не могу понять как именно это реализовать.
Пишу я все это с помощью C#, asp.net MVC.

Нужно ли писать это на C#, либо можно реализовать на View'шке с помощью JS?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2016, 14:32
Ответы с готовыми решениями:

Получить данные с сайта через API
Здравствуйте. Решил сделать программу для сбора данных ( цен ) с бирж через API. using...

Аутентификация через стандартное хранилище Windows
Приветствую знатоков! Задача пройти аутентификацию в программе используя стандартное хранилище...

Membership api, аутентификация истекает через минуту
На разрабатываемом компьютере со студией все нормально, но заливаю сайт на хостинг, после логина...

Разделение дня и ночи через прогноз погоды для сайта через API Яндекса
Ранее поднял уже этот вопрос https://www.cyberforum.ru/php/thread1470414.html но только сейчас...

9
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
15.08.2016, 14:53 2
Думаю лучше делать это на стороне контроллера. Что то вроде этого
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private async Task<string> Authorize(string userName, string password)
        {
            var uri = new Uri("http://portal.onlyoffice.com/api/2.0/authentication.json");
            var formContent = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("userName", userName),
                new KeyValuePair<string, string>("password", password)
            });
 
            var client = new HttpClient();
            var response = await client.PostAsync(uri.ToString(), formContent);
            var responseContent = await response.Content.ReadAsStringAsync();
            dynamic jsonResult = JObject.Parse(responseContent);
            return jsonResult.token;
        }
Соответсвенно метод можете вызывать в любом Action контроллера, или вашем хелпер классе, чтобы хранить токен
C#
1
2
3
4
5
public async ActionResult LoginInExternal()
{
    var token = await Authorize("123","123");
    return EmptyResult()
}
и тд.
1
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 44
15.08.2016, 15:15  [ТС] 3
Я дико извиняюсь, за такой тупой вопрос, но в строке
C#
1
private async Task<string> Authorize(string userName, string password)
как ошибка подсвечивается
C#
1
Task<string> Authorize
. Возможно нужно подключить какое-то дополнительное пространство имен? Но почему-то не могу понять какое.
0
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
15.08.2016, 15:18 4
C#
1
using System.Threading.Tasks;
Разве вижуал студия сама не предложила добавить using?
1
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 44
15.08.2016, 16:24  [ТС] 5
Появилась еще проблема. При попытке:
C#
1
2
3
4
5
public async ActionResult LoginInExternal()
{
    var token = await Authorize("123","123");
    return EmptyResult()
}
C#
1
LoginInExternal
выделяется как ошибка, из-за того, что "Возвращаемым типом асинхронного метода должен быть void, Task или Task<T>" Не могу понять что делать с этим?
И почему нужно
C#
1
return EmptyResult();
а не
C#
1
return token
?
0
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
15.08.2016, 16:31 6
Прощу прощения. Опеределение асинхронного метода измените на
C#
1
public async Task<ActionResult> LoginInExternal() {...}
Цитата Сообщение от EmoKinder Посмотреть сообщение
И почему нужно

return EmptyResult();
Возвращайте что угодно из метода, если необходимо возвращайте View();

C#
1
2
3
4
5
public async Task<ActionResult> LoginInExternal()
{
    var token = await Authorize("123","123");
    return View()
}
(View соостветсвенно должна существовать в вашей папке Views/ControllerName)

То есть авторизируйтесь, получайте, сохраняйте токен затем возвращайте пользователю все что хотите
0
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 44
16.08.2016, 12:41  [ТС] 7
При получении ответа от сервера и JObject.Parse я получаю ответ такого вида:
JSON
1
2
3
4
5
6
7
8
9
10
11
{{
  "count": 1,
  "status": 0,
  "statusCode": 201,
  "response": {
    "token": "LLKW+EdimXPPJgrnWkitFJzVox3klMfaLEUn7FHg8uh7NB0enOh9fB9vLEK3i+9eVu3JK7GP4KLPzbEKOOm5I+cv5rlr/QqA+KpdwThKmHBCHYfnO+rJf0Hni7Mqif2g",
    "expires": "2017-08-16T12:32:27.997834+03:00",
    "sms": false,
    "phoneNoise": null
  }
}}
Далее, при помощь строки
C#
1
return jsonResult.Token;
по-идее должен вернуться только Token, но проблема в том, что после выполнения кода:
C#
1
2
3
4
5
public async Task<ActionResult> LoginInExternal()
        {
            var token = await Authorize("email@gmail.com", "somepass");
            return View();
        }
значение token=null, тоесть значение Token'a не возвращается.
0
.NET C#,ASP.NET MVC
Эксперт .NET
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
16.08.2016, 13:24 8
Так вы бы логически смотрели что там переменной не хватает, я писал код на скорую руку прям в тексте ответа форума и не мог все учесть.

C#
1
return jsonResult.response.token;
1
0 / 0 / 0
Регистрация: 26.11.2014
Сообщений: 44
18.08.2016, 10:48  [ТС] 9
Тут еще такая штука. Получаю сначала ответ от сервера:

JSON
1
2
3
4
5
6
7
8
9
10
{{
  "count": 1,
  "status": 0,
  "statusCode": 201,
  "response": {
    "token": "/WU69C+VtGl8Y3P/VrV0hWlKG7oSCnCtUUgIHkvUEHvlZz2rRRfRFEjDLMNvvY+96MOJuN8R92WstsErmAeUkelfaj6UhuQvkxsP7ObUl1prLLtQolJ3kHr3oLf8qZgB",
    "expires": "2017-08-16T10:36:13.3041961+03:00",
    "sms": false,
    "phoneNoise": null
  }
После чего я пытаюсь выполнить:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private async Task<string> AddPerson(string email, string firstname, string lastname)
        {            
            var uri = new Uri("http://onesmallplanet.onlyoffice.eu/api/2.0/people");
            var formContent = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("email", email),
                new KeyValuePair<string, string>("firstname", firstname),
                new KeyValuePair<string, string>("lastname", lastname),
             });
 
            var client = new HttpClient();
            client.DefaultRequestHeaders.Add("Authorization", GlobalToken.token);
            var response = await client.PostAsync(uri.ToString(), formContent);
            var responseContent = await response.Content.ReadAsStringAsync();
            dynamic jsonResult = JObject.Parse(responseContent);
            return jsonResult.token; 
        }
Но проблема заключается в том, что при попытке отправить токен, я получаю ошибку:
The format of value '/WU69C+VtGl8Y3P/VrV0hWlKG7oSCnCtUUgIHkvUEHvlZz2rRRfRFEjDLMNvvY+96MOJuN8R92WstsErmAeUkelfaj6UhuQv kxsP7ObUl1prLLtQolJ3kHr3oLf8qZgB' is invalid.
Из гугла ничего не помогло, уже второй день сражаюсь с этим.

Есть идеи по решению данной проблемы?
0
4 / 4 / 5
Регистрация: 03.07.2015
Сообщений: 72
18.08.2016, 20:26 10
скорей всего проблема связана с символом /
попробуй закодировать токен перед отправкой на сервер в url формат
например HttpUtility.UrlEncode(токен);
0
18.08.2016, 20:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2016, 20:26
Помогаю со студенческими работами здесь

Подключение сайта к другому через API
В общем такая ситуация - имеется сайт на DLE 10.6. Тематика авто. Что бы он заработал в полную силу...

Считывание API с сайта через httpRequest
Кто может помочь с проблемой со считыванием API с сайта VK? Раньше программа работала. И считывала...

Два сайта связать через api на localhost
Сайт на престашоп, так вот задача через один сайт взаимодействовать с другим по средству api....

Аутентификация в Web Api и Asp.Net MVC 6
Есть задача: Проект на ASP.NET MVC 6 и отдельно проект на Web Api. Нужно сделать аутентификацию....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru