На мой взгляд, одной из самых больших проблем при создании веб-сайтов является реализация OAuth-провайдеров, зачастую это сложно, не работает, а фреймворки, созданные для того, чтобы сделать вещи проще, а не облегчать их.
Поэтому PureKrome и я решили создать WorldDomination: веб-аутентификация
Идея этого фреймворка заключается в том, чтобы внедрить OAuth на свой сайт без лишних хлопот. Базовая структура работает ТОЛЬКО с аутентификацией Google, Twitter и Facebook. Он не пытается создать модный пользовательский интерфейс для вас, он не требует написания большого и большого количества кода. Вы просто даете ему некоторую информацию, он перенаправляет, он возвращается и дает вам информацию аутентификации.
Совсем недавно ребята, участвовавшие в разработке JabbR, решили использовать библиотеку, и с помощью обратной связи мы добавили действительно потрясающую поддержку NancyFX, которую я покажу.
Установка
Установка библиотеки для Nancy требует установки библиотеки для Nancy.
PM> Install-Package Nancy.Authentication.WorldDomination
Это установит:
- Nancy.Authentication.WorldDomination
- WorldDomination.Web.Authentication
- RestSharp
Первый пакет — это провайдер Nancy, который соединяет все маршруты и обрабатывает перенаправление и обратный вызов.
Второй пакет является фактической реализацией, он не зависит от NancyContext
илиSystem.Web
Последний пакет требуется WorldDomination.Web.Authentication
для обработки обратного вызова и десериализации ответа.
Настройка
Теперь, когда он установлен, нам нужно его настроить, это можно сделать одним из двух способов: путем добавления информации в web.config
или путем регистрации информации вBootstrapper
Я собираюсь показать web.config
путь, но вы можете посетить вики-сайт github для получения WorldDomination.Web.Authentication
информации для настройки через загрузчик.
В разделе web.config
добавления конфигурации, как это
<section name="authenticationProviders" type="WorldDomination.Web.Authentication.Config.ProviderConfiguration, WorldDomination.Web.Authentication" />
Теперь добавьте authenticationProviders
элемент.
<authenticationProviders> <providers> <add name="Facebook" key="470874...41" secret="02bb584...332fe2" /> <add name="Google" key="58714009...ent.com" secret="npk...ooxCEY" /> <add name="Twitter" key="Rb7qNNP...znFTbF6Q" secret="pP...7hu9c" /> </providers> </authenticationProviders>
Вы можете получить ключ / секрет, регистрируя ваши приложения:
- Facebook: http://developers.facebook.com/docs/howtos/login/server-side-login/
- Twitter: https://dev.twitter.com/
- Google: https://code.google.com/apis/console/?pli=1#access
Реализация вашего обратного вызова
Теперь вам нужно реализовать обратный вызов, этот обратный вызов — это то, что ВЫ хотите сделать с результатом успешной (или неудачной) аутентификации, вам нужно реализовать это, потому что мы не знаем, что вы запланировали, если вы хотите создать сеанс, установить куки, использовать аутентификацию формы, что угодно, это ваше дело.
Для этого вы можете создать новый класс и реализовать интерфейс IAuthenticationCallbackProvider
public class Test : IAuthenticationCallbackProvider { public dynamic Process(NancyModule nancyModule, AuthenticateCallbackData model) { return nancyModule.Negotiate.WithView("AuthenticateCallback").WithModel(model); } }
Этот пример просто ответит представлением AuthenticateCallback
и передаст ему модель с данными, возвращенными поставщиком. В идеале вы должны проверить, является ли пользователь новым, или вам нужно добавить его в свою базу данных, или аутентифицировать его в вашей системе.
Вы можете взглянуть на реализацию, используемую JabbR, здесь , которую я отразил как суть здесь, если она изменена или перемещена и ссылка становится мертвой.
Если вы используете Nancy с контейнером TinyIoC по умолчанию, вам не нужно ничего регистрировать, он будет автоматически выбран Nancy.Authentication.WorldDomination
и вызван.
Добавление некоторых кнопок
Наконец, вам нужно добавить несколько кнопок на экран. Это где вы должны ссылаться на некоторые конкретные URL.
Два URL-адреса, используемые системой:
- Redirect: / аутентификация / редирект / ключ провайдера
- Обратный вызов: / authentication / authenticatecallback? Providerkey = ключ провайдера
Примеры: ссылки, которые вы бы добавили на свою страницу, были бы похожи на:
<a href="/authentication/redirect/Twitter"><img src="/Content/twitter_32.png" /></a> <a href="/authentication/redirect/Facebook"><img src="/Content/facebook_32.png" /></a> <a href="/authentication/redirect/Google"><img src="/Content/google_32.png" /></a>
Эти ссылки являются просто обычными гиперссылками, предоставляя вам абсолютную свободу и гибкость в оформлении их по своему желанию. Поскольку мы абсолютно НЕ вовлечены в процесс создания ссылок, мы не можем помешать этому.
Все, что вам нужно сделать, это убедиться, что предоставленные нам ссылки выглядят так, как указано выше.
Ваши URL обратного вызова в конечном итоге будут выглядеть так:
- / Аутентификации / authenticatecallback? Providerkey = твиттер
- / Аутентификации / authenticatecallback? Providerkey = facebook
- / Аутентификации / authenticatecallback? Providerkey = Google
И вы сделали!
Теперь вы можете запустить ваше приложение:
Мы нажимаем на Google:
И мы перенаправлены обратно на сайт после разрешения аутентификации с Google:
Это все, что нужно сделать.
Образец можно найти на github здесь:
Вы можете найти исходный код на github:
И пакеты Nuget