Pull to refresh

OAuth2 клиент для ASP.NET

Reading time2 min
Views14K
OAuth2 – протокол авторизации, логическое развитие OAuth 1.0. Подробнее про него можно прочитать здесь.

Блуждая по интернету в поисках нормальной библиотеки OAuth клиента для .net я не нашёл ничего подходящего и решил написать сам, благо ничего сложного в этом нет. От библиотеки требуется производить три действия: выдавать ссылку на запрос кода авторизации, после возврата от авторизатора перенаправлять приложение на страницу запроса токена и далее производить запросы используя полученный токен.

За первые два действия отвечает абстрактный класс OAuthAuthorizer и унаследованные от него классы для конкретных социальных сетей. На текущий момент поддерживаются facebook и Вконтакте, но нет ничего сложного в дописывании класса для любого другого провайдера — нужно просто переопределить AuthorizeUri и TokenUri, и, например для одноклассников, добавить параметр «response_type=code».

Инициализация авторизатора выглядит так:
public RedirectResult LogOn()
{
var fbAuth = new FacebookAuthorizer();
fbAuth.ClientId = "2128506";
fbAuth.Scope = "user_work_history,friends_work_history,publish_stream,read_friendlists";
fbAuth.RedirectUri = "http://backtothefuture.com/Account/Return";
return Redirect(fbAuth.CodeRequestUri);
}


Клиент перенаправляется по адресу из fbAuth.CodeRequestUri, там решает нужно ему пользоваться нашим приложением или нет, после чего facebook перенаправит его обратно на наш сайт, заботливо поместив код авторизации в параметры GET запроса.

public ActionResult Return(string code)
{
var fbAuth = new FacebookAuthorizer();
fbAuth.ClientId = "2128506";
fbAuth.ClientSecret = "top_secret";
fbAuth.RedirectUri = "http://backtothefuture.com/Account/Return";
var response = auth.GetAuthorizationResponse(code);


Переменная response сейчас содержит ответ от страницы авторизации facebook, который, если мы всё делали правильно и код авторизации верен, содержит в себе токен, дающий безграничную (в рамках дозволенного) власть над аккаунтом пользователя. Теперь можно приступить к третьей, самой главной части авторизации – запросам данных пользователя с facebook. Для этого служат классы унаследованные от интерфейса IOAuthClient, например FacebookClient

var client = new FacebookClient();
client.Response = response;
Dictionary<string,object> me = OAuthClientUtils.JsonToDictionary(client.Me());
return Json(me);
}


Пользователю будет возвращён Json объект с его данными, которые вернул facebook.

Исходный код библиотеки доступен на гитхабе. Буду благодарен за любые предложения по улучшению.
Tags:
Hubs:
+13
Comments11

Articles

Change theme settings