Instagram-oauth-2

Сегодня не работает Инстаграм, поэтому небольшой фрагмент кода рассказывающий про реализацию oauth2.0 для instagram. Проект этот достаточно молодой, поэтому наплевал не только на интерфейс, но и на правильность реализации некоторых функций, в частности в документации есть ошибки, где указан параметр client_id вместо consumer_key, надо быть внимательным. Но основную проблему может создать некорректность ответа на запрос о получении токена, со стороны инстаграма. И так как мы используем библиотеку DotNetOpenAuth для реализации залогинивания, то и переопределение или замена каких-либо методов достаточно сложна. Во-первых, так как библиотека написана профессионалами, то в ней много inner и private классов и protected функций. Единственный правильный выход это переопределить метод ProcessUserAuthorization, таким образом, что наш InstagramClient : WebServerClient будет выглядет следующим образом:

Copy Source | Copy HTML
  1. public class InstagramClient : WebServerClient
  2. {
  3.     public UserInfo User;
  4.     private static readonly AuthorizationServerDescription Description = new AuthorizationServerDescription
  5.         {
  6.             AuthorizationEndpoint = new Uri("https://api.instagram.com/oauth/authorize/"),
  7.             ProtocolVersion = OAuth2.ProtocolVersion.V20,
  8.             TokenEndpoint = new Uri("https://api.instagram.com/oauth/access_token"),
  9.         };
  10.     /// <summary>
  11.     /// Initializes a new instance of the <see cref="InstagramClient"/> class.
  12.     /// </summary>
  13.     public InstagramClient()
  14.         : base(Description)
  15.     {
  16.         this.AuthorizationTracker = new TokenManager();
  17.     }
  18.     /// <summary>
  19.     /// Получение токена авторизации
  20.     /// </summary>
  21.     /// <param name="request"></param>
  22.     /// <returns></returns>
  23.     /// <remarks>http://instagr.am/developer/authentication/</remarks>
  24.     public new IAuthorizationState ProcessUserAuthorization(HttpRequestBase request = null)
  25.     {
  26.         if(HttpContext.Current == null || String.IsNullOrEmpty(HttpContext.Current.Request["code"]))
  27.         {
  28.             //redirect
  29.             return base.ProcessUserAuthorization(request);
  30.         }
  31.         Uri callback = MessagingUtilities.GetRequestUrlFromContext();
  32.         callback = new Uri(callback.Scheme+"://"+callback.Authority+callback.AbsolutePath);
  33.         //manual processing
  34. //'client_id=CLIENT-ID' \
  35. //-F 'client_secret=CLIENT-SECRET' \
  36. //-F 'grant_type=authorization_code' \
  37. //-F 'redirect_uri=YOUR-REDIRECT-URI' \
  38. //-F 'code=CODE' \https://api.instagram.com/oauth/access_token
  39.             var args = new Dictionary<string, string>
  40.                            {
  41.                                {"client_id", Instagram.APIKey.ClientId},
  42.                                {"client_secret", ConfigurationManager.AppSettings["instagramConsumerSecret"]},
  43.                                {"grant_type", "authorization_code"},
  44.                                {"redirect_uri", callback.OriginalString},
  45.                                {"code", HttpContext.Current.Request["code"]}
  46.                            };
  47.         string JSON = HttpClient.POST(Description.TokenEndpoint.OriginalString, args);
  48.             JObject obj = JObject.Parse(JSON);
  49.             if (obj["error_message"] != null)
  50.             {
  51.                 Debug.WriteLine(JSON);
  52.                 HttpContext.Current.Response.Redirect(String.Format("/?{0}", obj["error_message"].Value<string>()), true);
  53.             }
  54.             if(obj["user"]!=null)
  55.             {
  56.                 //(Model.Responses.UserResponse)Mapper.Map<Model.Responses.UserResponse>(GetJson(AuthInfo.User.Id))
  57.                 User = (UserInfo)Mapper.Map<UserInfo>(obj["user"].ToString());
  58.             }
  59.             return new AuthorizationState { AccessTokenIssueDateUtc = DateTime.Now, AccessToken = obj["access_token"].Value<string>() };
  60.     }
  61. }

Метки: ,   Категории:Code


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner

Облако тэгов

Мои Твиты

Twitter августа 16, 21:21
программа instagramliker обновлена 2018г еще раз http://dlvr.it/Qg7KPW

Twitter августа 15, 18:33
Разбор 2 сезона Рассказ служанки http://dlvr.it/Qg0Qxv https://twitter.com/f1ashr/status/1029798147676037121/photo/1

Twitter августа 14, 10:28
Юпитер для Америки (Юмор от НАСА) http://dlvr.it/QfqqTP https://twitter.com/f1ashr/status/1029313699054477312/photo/1

Twitter августа 14, 10:28
Мелькает число 35 в международных новостях http://dlvr.it/QfqqXV

Twitter августа 10, 23:41
Рейтинг каналов и ботов Телеграмм http://dlvr.it/QfVknB https://twitter.com/f1ashr/status/1028063721153691648/photo/1

Twitter августа 10, 23:41
Facebook потерял спутник во взрыве SpaceX http://dlvr.it/QfVklq https://twitter.com/f1ashr/status/1028063716946792448/photo/1

Twitter августа 10, 23:09
Интернет мемы победили Иисуса http://dlvr.it/QfVdXj https://twitter.com/f1ashr/status/1028055673823670272/photo/1

Twitter августа 10, 23:09
Японское аниме в российских кинотеатрах http://dlvr.it/QfVdV3 https://twitter.com/f1ashr/status/1028055668341661696/photo/1

Twitter августа 10, 23:09
Карта из 500млн. чекинов http://dlvr.it/QfVdQG https://twitter.com/f1ashr/status/1028055661697875968/photo/1

Twitter августа 10, 22:35
Медведь открывает дверь http://dlvr.it/QfVWZY https://twitter.com/f1ashr/status/1028047110791299072/photo/1

Twitter августа 10, 22:01
На батуте в космос http://dlvr.it/QfVNw3

Twitter августа 10, 21:29
Российские дирижабли покарят мир в 2035 году http://dlvr.it/QfVGwd https://twitter.com/f1ashr/status/1028030497220259840/photo/1

Twitter августа 10, 21:29
Skype and Baidu links http://dlvr.it/QfVGyS

Twitter августа 10, 21:29
7 лет аккаунту в твиттере http://dlvr.it/QfVGz9

Twitter августа 8, 09:51
Разбор сериала Экспансия (Пространство) http://dlvr.it/QfBHV6 https://twitter.com/f1ashr/status/1027130062976372736/photo/1

Twitter июля 29, 17:51
Добыча криптовалюты в браузере посетителей сайта http://dlvr.it/Qd94p4 https://twitter.com/f1ashr/status/1023626972050518016/photo/1

Twitter июля 29, 04:45
Танцы человека с роботом http://dlvr.it/Qd6Zmn

Twitter июля 29, 04:45
Казахстан переходит на 2-й этап к демократии http://dlvr.it/Qd6Zmt

Twitter июля 29, 04:45
Проблема монетизации на Ютубе http://dlvr.it/Qd6ZfV https://twitter.com/f1ashr/status/1023429180506009600/photo/1

Twitter июля 29, 04:12
Двенадцать часов на сценарной карте http://dlvr.it/Qd6VJL https://twitter.com/f1ashr/status/1023420876362895361/photo/1

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008