2013-04-02 4 views
13

Я создаю приложения для клиента, который необходимо выполнить следующие действия:Как реализовать OAuth для приложения?

  • Разрешить пользователям для проверки подлинности с помощью Google, Facebook, Twitter и LinkedIn.
  • Разрешить пользователям добавлять дополнительных поставщиков после регистрации. (т. е. если пользователь аутентифицирован с помощью Google, то они также должны иметь возможность добавлять всех или всех других провайдеров.)
  • Разрешить пользователям импортировать контакты Google, список друзей Facebook, подписчиков Twitter и друзей Linkedin для создания пользовательский список контактов.

Где лучше всего начать об этом узнать? Есть ли стандарт, который все используют для этих вещей в .NET? Я несколько раз заходил в Google, и, хотя кажется, что большинство людей указывают на DotNetOpenAuth, я не могу найти твердых советов о том, как использовать библиотеку. Загрузка идет с образцами, но это все еще меня озадачивает.

Я предположил, что это было бы так просто, как: секреты

  • Настройка поставщиков.
  • Начните вход с провайдером
  • идентифицировать пользователь Идента куки
  • Создать запись пользователя в моей базе данных и хранить уникальный идентификатор от провайдера.

Но похоже, что у каждого провайдера есть свой собственный код, и все это так по-разному и запутанно. У Facebook есть некоторый объект графика, у twitter есть некоторый «InMemoryTokenManager», который я не понимаю, и Google даже не имеет примера проверки подлинности, только пример адресной книги Google. И, кроме всего прочего, вам по какой-то причине нужно скопировать бит кода из какой-то демонстрации ApplicationBlock в образцы в свое приложение и получить все, чтобы скомпилировать, не зная, что черт, который он пытается сделать, - это трудная задача.

Я чувствую, что мне не хватает чего-то фундаментального со всем этим.

Даже рекомендация книги была бы замечательной на данный момент.

Я считаю, что я понимаю концепции высокого уровня OAuth, но как только я попытаюсь погрузиться в nitty-gritty, я сразу же заблудился.

+0

Просмотреть это vedieo: http://www.slideshare.net/leahculver/implementing-oauth –

+0

К сожалению, разница в степени, в которой вы хотели бы реализовать каждый API социальных сетей, будет отличаться. Тем не менее, большинство из них используют форму O'Auth с токеном для фактического соединения. – Greg

+2

Мне просто жаль, что для DotNetOpenAuth не было простых учебных пособий. Каждому SO-запросу, который запрашивает такую ​​документацию, неизбежно говорят «загрузить образцы, это все, что вам нужно». Для кажущихся тупыми людьми, как я, образцы не «все, что вам нужно». – Chev

ответ

6

Во-первых, нет смысла использовать внешние библиотеки, если вы находитесь в сети 4.5, где по умолчанию шаблон asp.net по умолчанию имеет код аутентификации для большинства указанных поставщиков.

Во-вторых, если вы все еще нужен хороший учебник по некоторым деталям аутентификации oauth2, не взглянуть на этот замечательный пост Бен Фостер http://ben.onfabrik.com/posts/oauth-providers

В-третьих, к сожалению, если вам нужно что-нибудь еще, чем Аутентификации, нет один протокол. Таким образом, у каждого провайдера есть свой способ разоблачения этих дополнительных данных - контактов, сообщений и т. Д. Вы не можете много сделать, это не имеет никакого отношения к oauth2, но это всего лишь способ вызвать конкретный api, который случайно случается выставлены как веб-службы rest/xml на основе аутентификации oauth2. Это означает, что если вы выполняете только проверку подлинности, то для каждого провайдера протокол в основном одинаковый. Все более конкретно.

В-четвертых, я бы придерживался адреса электронной почты, который был возвращен поставщиком, а не внутренним идентификатором. Не все провайдеры поддерживают идентификатор, тогда как все они могут возвращать электронную почту пользователя. И вы можете доверять этой информации, поскольку провайдеры проверяют электронные письма, прежде чем возвращать их через oauth2.

+0

Twitter, похоже, не возвращает электронное письмо, и, похоже, нет возможности даже спросить пользователя об этом. – Chev

+0

@AlexFord: спасибо за этот комментарий. Я всегда делаю oauth2 для google/facebook/live, а отсутствие электронной почты из Twitter - это что-то новое для меня. Рассмотрите мое последнее замечание недействительным, но другие придерживаются. –

2

Я предлагаю вам использовать Мировое господство от PureKrome, это тривиально, хорошо документировано и очень приятно!

https://github.com/PureKrome/WorldDomination.Web.Authentication

Он обрабатывает Twitter, Google, Facebook и др с простыми конфигурациями одна линия, и она обрабатывает все остальное.

Создатель часто висит вокруг n jabbr.net.

+1

Hahaha Мне нравится README. Это поможет мне сделать больше, чем просто аутентифицировать? В какой-то момент мне нужно также захватить друзей и контакты пользователей. – Chev

+0

Нет, это не будет сделано - afaik, который не имеет ничего общего с OAuth, который будет на заказ для каждого сервиса, с которого вы хотите получить данные. – Moo

+1

Btw, взял мне 5 минут, чтобы перехватить WD в существующем приложении :) просто сохраните токен в таблице, связанной с учетной записью пользователя (я храню имя поставщика, токен, а затем необработанное возвращение от провайдера, вы никогда не знаете, когда вам может понадобиться это ...) и установите файл cookie asp.net Auth вручную. – Moo

1

ASP.NET MVC 4 'Internet Application' имеет DotNetOpenAuth, реализованный на нем, вы должны взглянуть на это, если вы еще этого не сделали.

+0

Да, я это видел. Кажется, я не могу найти никаких примеров этого без тесной интеграции с поставщиком членства по умолчанию и ролями. Это приложение не использует это. Он выполняет 'FormsAuthentication.SetAuthCookie (userId)', а затем использует 'User.Identity.Name', чтобы позже получить доступ к' userId'. После этого все модели пользовательских данных. – Chev

+0

Тогда вам, вероятно, придется взглянуть на развертывание собственной реализации 'SimpleMembershipProvider'. –

+0

Фигурованные как много. Я действительно пытался избежать этого, но если нет другого пути. Является ли встроенная функциональность расширяемой? Могу ли я добавить LinkedIn в микс? – Chev

0

Посмотрите на проект Social Bootstrap API (он использует служебную программу, но приятно видеть, что все эти технологии модного слова работают вместе в читаемом образце).

Кроме того, если вы хотите получить лучшую ручку о том, как работает OAuth, Mashape has good explanation. Это даст вам возможность взглянуть на материал за кулисами, который реализуется большинством оболочек.

Rick Strahl has an example, который я использовал несколько лет назад для реализации OpenID в MVC. Это немного устарело, но в то время это была одна из самых простых реализаций. Несколько сайтов клиентов, которые я создал с этой реализацией, все еще работают нормально.

Смежные вопросы