/ / MVC API - як реалізувати OAuth? - asp.net-mvc, api, oauth, dotnetopenauth

API на базі MVC - як реалізувати OAuth? - asp.net-mvc, api, oauth, dotnetopenauth

Протягом декількох годин я намагаюся працювати з OAuth за допомогою API, над яким я працюю, і, очевидно, мій підхід повинен бути неправильним, тому що я постійно потрапляв у глухий кут.

Що я отримав:
- API, який реалізований у .NET MVC, який повертає результат даних як XML, або JSON.
- Для використання API потрібно використовувати ключ API.
- веб-сайт (X) як сервер для керування ключами API.
- Інший веб-сайт (Y) з набором даних, з яких цей API витягує дані.

Що я маю отримати:
- Можливість дозволити ключам API отримати доступ до даних про користувачів з веб-сайту (Y), якщо вони дозволяють це через OAuth (1.0A).

Що я спробував:
- Дотепер, мій підхід полягав у використанніБібліотека DotNetOpenAuth, але це майже все про те, як реалізувати OpenId, і деякі класи в просторі імен OAuth здаються навіть закодованими до функціональності OpenId. Так що я намагався побачити, що відбувається в прикладах, які використовують OpenId, і подивитися, чи можу я використовувати частини цього для реалізації OAuth без OpenId.
- Різні підходи включають, на серверісторони, щоб прочитати "UnauthorizedTokenRequest" і повернути його за допомогою виклику ServiceProvider.Channel.PrepareResponse (unauthorizedTokenRequest). вона все ще повертає відповідь, яку я не можу прочитати на кінці клієнта.

Отже, моє питання насправді:

  1. Чи існує керівництво / документація, що говорить вамякі частини бібліотеки DotNetOpenAuth я повинен використовувати на серверній стороні, і коли в процесі вони повинні бути використані, для того, щоб реалізувати OAuth на MVC-сервері, який не закодований у OpenId, оскільки жоден з веб-сайтів (X, Y) ) підтримує OpenId?
  2. Чи варто використовувати іншу бібліотеку, якщо я не збираюся використовувати OpenId, оскільки DotNetOpenAuth, здається, найбільше фокусується?
  3. Будь-які інші підходи, які краще підходять для моєї потреби, дуже вітаються.

Заздалегідь спасибі!
- Джонні, Данія

Відповіді:

4 для відповіді № 1

DotNetOpenAuth підтримує OpenID, OAuth та InfoCard, коли вони використовуються разом і окремо. Це звучить як те, що ви збираєтеся підібрати, що демонструє зразок DotNetOpenAuth "OAuthServiceProvider". Правда, цей зразок використовує OpenID для входу користувачів, але ви можете повністю ігнорувати сторінку login.aspx у зразку і таким чином повністю відокремитись від OpenID Використання OAuth без OpenID повністю підтримується.

Пара методів OpenID у класах OAuth лише підтримує розширення OpenID + OAuth OpenID, яке не стосується вашої ситуації, тому ви можете ігнорувати їх.

Що стосується вашої двічі доданої проблеми, яку ви бачили, іноді трапляється, що постачальник послуг неналежним чином два Модулі перевірки вхідних запитів OAuth, коженперевіряючи nonce і таким чином другий модуль завжди відхиляє кожен запит. Ви можете перевірити, чи викликає ця проблема. В іншому випадку перевірте, чи незмінний зразок працює для вас, і якщо так, порівняйте, що він робить проти того, що ви робите, щоб побачити, що може бути неправильно. Активація реєстрації також часто допомагає.