Реализация аутентификации OAuth 2.0 для моего API

#c# #.net #oauth-2.0 #oauth-provider

#c# #.net #oauth-2.0 #oauth-провайдер

Вопрос:

Я уже некоторое время успешно использую Facebook Graph API (использует oauth 2.0 для аутентификации). Теперь мне нужно написать свой собственный API, который позволит разработчикам подключаться к нему аналогичным образом. Я просмотрел различные библиотеки, но мне хотелось бы что-нибудь более компактное, поэтому я решил создать свою собственную. Глядя на код, который я должен аутентифицировать пользователя на facebook, это выглядит относительно просто, но, пожалуйста, поправьте меня, если я сбиваюсь с пути.

Сначала мне нужно было бы предоставить защищенную страницу, на которую потребителю нужно было бы перенаправить. например https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEYamp;redirect_url=CALLBACK_URL . Пользователь проверил бы приложение, после чего я перенаправил бы обратно на URL, указанный в URL обратного вызова, с oauth_token в строке запроса. Я полагаю, я мог бы просто сгенерировать случайную уникальную строку здесь для oauth_token и сохранить ее для пользователя для этого конкретного потребителя (РЕДАКТИРОВАТЬ: Пожалуйста, смотрите Ответ ниже, это должно быть уникальным для каждого приложения-потребителя, а не для пользователя).

Это первый шаг на пути. Теперь мне нужно предоставить вторую защищенную страницу, на которую пользователь будет отправлять веб-запрос. eg https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY amp;client_secret=CONSUMER_SECRET amp;oauth_token=OAUTH_TOKEN_RETURNED_ABOVE. Это позволило бы потребителю обменять oauth_token, возвращенный выше, на токен доступа. Я бы снова просто сгенерировал случайную уникальную строку и сохранил ее для пользователя для этого конкретного потребителя.

Теперь мой API будет принимать access_token для методов, которые пытаются получить информацию, специфичную для пользователя, который ее использует.

Я хотел бы знать, правильно ли я все понял. Спецификация OAuth 2.0 кажется чрезвычайно тривиальной, если это так. Кроме того, почему мы должны заменять oauth_token на access_token? У меня есть своя идея, но я был бы признателен, если бы кто-нибудь мог помочь прояснить это.

Я был бы очень признателен за ваш отзыв, поскольку я не хочу продолжать и тратить часы на внедрение этого, когда это совершенно неправильно.

Спасибо

Ответ №1:

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

oauth_token принадлежит вашему клиентскому приложению (т. Е. настольному facebook Reader), которое аутентифицирует ваше приложение (точно так же, как идентификатор). Вы отправляете это, чтобы получить обратно access_token, специфичный для вашего приложения и зарегистрированного пользователя, который позволяет вам получать доступ к ограниченным ресурсам, связанным с пользователем.

Вот базовый процесс аутентификации настольного приложения (взят из:http://developers.gigya.com/020_Developer_Guide/85_REST/OAuth2 )

REST OAuth 2.0

На самом деле диграмма потока с временной шкалой (сверху вниз, взято из:http://www.ibm.com/developerworks/web/library/wa-oauthsupport/?ca=drs —)

Поток протокола

И, наконец, полная процедура: (взята из http://h2anetwork.org/ProjectDocs/DPI/DPI_Framework.html )

Поток протокола OAuth