Запросить учебник для добавления поддержки Openid в приложение NerdDinner ASP.NET MVC - PullRequest
26 голосов
/ 01 июня 2009

Я изучаю ASP.NET MVC и OpenId с помощью учебника по ASP.NET MVC NerdDinner.

Я бы хотел заменить систему аутентификации в NerdDinner только на OpenId. Я скачал последние библиотеки DotNetOpenAuth, но я не уверен, как все это собрать. Кто-нибудь может помочь с быстрым пошаговым руководством?

Это так же просто, как добавить в библиотеку, или в приложении также требуются значительные изменения?

Ответы [ 5 ]

14 голосов
/ 02 июня 2009

После того, как вы загрузите dotnetopenid , посмотрите в каталоге samples \ RelyingPartyMvc. Есть пример, где они заменяют систему аутентификации MVC по умолчанию на OpenID. Соответствующий код находится в Controllers / UserController.cs. Вот действие Аутентификация:

//Stage 1: Show form asking for Open ID identifier URL
var openid = new OpenIdRelyingParty();
if (openid.Response == null) {
    // Stage 2: user submitting Identifier
    Identifier id;
    if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) {
            openid.CreateRequest(Request.Form["openid_identifier"]).RedirectToProvider();
    } else {
            ViewData["Message"] = "Invalid identifier";
            return View("Login");
            }
} else {
    // Stage 3: OpenID Provider sending assertion response
    switch (openid.Response.Status) {
        case AuthenticationStatus.Authenticated:
            FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, false);
            break;
        case AuthenticationStatus.Canceled:
            ViewData["Message"] = "Canceled at provider";
            return View("Login");
        case AuthenticationStatus.Failed:
            ViewData["Message"] = openid.Response.Exception.Message;
            return View("Login");
    }
}
return new EmptyResult();
7 голосов
/ 01 июня 2009

Не указано NerdDinner, но может быть полезно для тех, кто хочет реализовать поддержку OpenId в своем приложении ASP.NET MVC:

6 голосов
/ 04 июня 2009

Ладно, у меня такая работа! Ответ представляет собой комбинацию ответов ниже, а также некоторые игры с контроллерами и представлениями.

Сначала загрузите DotNetOpenAuth , а затем перейдите в каталог примеров, где вы можете найти код OpenIdRelayingPartyMvc. В моем решении NerdDinner,

  • Я добавил ссылку на сборку DotNetOpenAuth
  • добавили новый «UserController» и скопировали в код из примера UserController
  • добавил правильные операторы using и изменил пространство имен для отражения NerdDinner.Controllers
  • воссоздали аналогичные «Пользовательские» представления из примера, изменив их соответствующим образом, чтобы отразить идентификаторы основного содержимого сайта.
  • добавлено представление xrds под домашним контроллером. (не уверен, что это делает)
  • изменил индекс и добавил методы Xrds ActionResult в HomeController для отражения образца.
  • изменил файл web.config (в корневой папке) в разделе Authenticate, чтобы изменить путь входа в систему на новый UserController и метод входа в систему
  • Измените ссылки ActionLink'а LogOnUserControl, чтобы они указывали на новые методы UserControl и «Вход» и «Выход».
  • возиться с различными представлениями, которые напрямую вызывают функцию входа в систему

Сейчас это работает ограниченным образом. Я могу войти в систему и взаимодействовать с приложением NerdDinner с помощью OpenID. Так что это круто. Однако некоторые функции еще не работают. Сохранение созданного ужина не работает, но и не зависает. Мне придется исследовать, как перенести некоторые функции членства в AccountController в UserController. Я буду обновлять этот пост (предложения и указатели приветствуются).

1 голос
/ 01 июня 2009

Посмотрите на каталог Samples / OpenIdRelyingPartyMvc (простой веб-сайт ASP.NET MVC, использующий аутентификацию OpenId). Вы можете начать с копирования Home / User Controllers / Views и настроек из web.config в ваш проект. Я думаю, что это самый быстрый способ дать вашему сайту аутентификацию OpenId. Затем, , как сказал Александр Прокофьев , есть очень полезная запись в блоге Эндрю Арнотта (DotNetOpenAuth / DotNetOpenId) - Добавьте поддержку входа в OpenID на свой сайт ASP.NET MVC

0 голосов
/ 01 июня 2009

В Codeplex есть стартовый набор участника, который должен быть тем, что вы ищете. Они оба должны следовать модели провайдера (читайте об этом), если они следуют соглашению об аутентификации Microsoft.

http://mvcmembership.codeplex.com/

...