@Nubzilo
Изучаю C#

Возможна ли авторизация OAuth 2.0 без браузера?

Добрый вечер. Подскажите пожалуйста, как можно, и возможно ли, авторизоваться через OAuth 2.0 с клиентского приложения (WinForms, можно и WPF) без использования браузера, а по предварительно введенному логину и паролю?
  • Вопрос задан
  • 5285 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Поставщик может позволить принимать у пользователя логин и пароль и преобразовывать их в маркер доступа (accsss token). Но, как правило в целях безопасности, никто не дает такой возможности.

Попробуйте: если grant_type будет password, то данные пользователя можно передавать в параметрах username и password при получении маркера доступа. Либо использовать grant_type равный client_credentials, тогда данные пользователя должны передаваться в HTTP заголовке Authorization (при использовании HTTPS это более безопасный способ, чем password).

Например, если бы Facebook позволял это делать, то запрос маркера доступа мог бы быть таким:
https://graph.facebook.com/oauth/access_token?client_id=123&client_secret=abc&
grant_type=password&username=pupkin&password=000


В моей библиотеке пока нет возможности менять grant_type снаружи, но можно внутри поменять. Например, InstagramClient.cs, в конструкторе указать GrantType:

base.GrantType = GrantType.ClientCredentials;

И далее использовать клиент:

var client = new InstagramClient
(
  "9fcad1f7740b4b66ba9a0357eb9b7dda", 
  "3f04cbf48f194739a10d4911c93dcece"
);
client.ReturnUrl = "http://oauthproxy.nemiro.net/";
client.Username = "aleksey";
client.Password = "Frif#dser#23dssd@Dsdfjjfsi";
var accessToken = client.AccessToken;

И сервер ответит:
{"code": 400, "error_type": "OAuthException", "error_message": "Invalid grant_type"}

Плохой пример :P

А вот Facebook, на удивление, вернул маркер доступа:
var client = new FacebookClient("1435890426686808", "c6057dfae399beee9e8dc46a4182e8fd");
client.Username = "aleksey";
client.Password = "a6lGmDZsCb1SuHsIQw89ZqK9";
var accessToken = client.AccessToken;

Но у меня сомнения, что поставщик просто так позволит это использовать кому попало, в реальных условиях, без ограничений. Наверняка придется жесткую проверку модератором проходить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Nubzilo Автор вопроса
Изучаю C#
А более универсальные вариант? Если залогиниться нужно не на фейсбук, а например в инстаграм?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы