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 февраля 19, 06:57
Диоксин угрожает планете! http://dlvr.it/QGwPKJ https://twitter.com/f1ashr/status/965480472095555584/photo/1

Twitter февраля 11, 18:36
@typographera @lustforcookies Но Москва на 70 лет моложе и была основана при Кутузове, когда начали железную дорогу прокладывать.

Twitter февраля 11, 17:24
@lustforcookies @typographera А ничего, что Коломна основана от силы 270 лет назад?

Twitter февраля 11, 14:07
Украина готовит на Евровидение песню с быками http://dlvr.it/QFw6Kb

Twitter февраля 9, 14:07
Чем белые отличаются от черных? http://dlvr.it/QFh4j8 https://twitter.com/f1ashr/status/961964675469426690/photo/1

Twitter февраля 6, 09:57
Победа свободы над здравым смыслом http://dlvr.it/QFD2S4 https://twitter.com/f1ashr/status/960814600802377731/photo/1

Twitter февраля 4, 15:32
В Твиттере начался обвал фолловеров http://dlvr.it/QDzJLg

Twitter февраля 3, 08:34
Суммарная капитализация криптовалют http://dlvr.it/QDqJyj

Twitter февраля 2, 10:52
Музыка про прилет Американцев на Марс http://dlvr.it/QDhYq7 https://twitter.com/f1ashr/status/959378893017726977/photo/1

Twitter января 28, 17:04
Разбор трилогии Матрицы (The Matrix Trilogy) http://dlvr.it/QD3h9W https://twitter.com/f1ashr/status/957660569674199040/photo/1

Twitter января 24, 13:20
Google Lunar X Prize - за 10 лет никто не смог запуститься на Луну http://dlvr.it/QCYSRW https://twitter.com/f1ashr/status/956154641753911298/photo/1

Twitter января 24, 04:03
Разбор сериала Туман или 4 всадника Апокалипсиса http://dlvr.it/QCVWXz https://twitter.com/f1ashr/status/956014586666287104/photo/1

Twitter января 23, 19:50
Пасха в Москве 2 сентября 2017 года http://dlvr.it/QCS7cD https://twitter.com/f1ashr/status/955890398899007488/photo/1

Twitter января 23, 19:50
Пользователи умудрились поломать гео-локацию в Инстаграм http://dlvr.it/QCS7hp

Twitter января 23, 16:29
В бюджете Америки появились лишние 2 трлн. долларов http://dlvr.it/QCQpPr

Twitter января 22, 14:45
Добродел обновился http://dlvr.it/QCGHwl https://twitter.com/f1ashr/status/955451259439407105/photo/1

Twitter января 22, 13:32
Рейтинг каналов и ботов Телеграмм http://dlvr.it/QCFt9v https://twitter.com/f1ashr/status/955432885657395200/photo/1

Twitter января 21, 16:15
Битва за Мосул в 360 с вертолета http://dlvr.it/QC84Xk https://twitter.com/f1ashr/status/955111520337248256/photo/1

Twitter января 21, 16:15
3 февраля стартует год огненного Петуха http://dlvr.it/QC84XQ

Twitter января 21, 16:15
Независимая Подмосковия http://dlvr.it/QC84X3

Мой твиттер

Копирайт

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

© Copyright 2008