2009-06-01 5 views
26

Я ищу информацию об ASP.NET MVC и OpenId с помощью учебника ASP.NET MVC NerdDinner.Запрос на учебное пособие для добавления поддержки Openid для приложения ASP.NET MVC NerdDinner

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

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

+1

+1 для «меня к» – Nifle

ответ

14

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

//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(); 
+0

Я загрузил код и прочитал по направлениям, но до сих пор неясно, как все это сочетается. В примере NerdDinner используется AccountController по умолчанию. Аутентификация и услуги членства содержатся в AccountController. Должен ли приведенный выше код быть объединенным в этот контроллер? – TMC2K

+0

В приведенном выше коде используется контроллер UserController. Это в основном замена AccountController. Вам просто нужно будет обновить ссылки или маршруты, чтобы указать на них соответственно. – nikmd23

+0

Этот образец, как представляется, использует пакет dotnetopenid, а не новый пакет dotnetopenauth, который заменил его. – itchi

0

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

http://mvcmembership.codeplex.com/

+1

Будьте осторожны с этим. Это несколько месяцев устарело и даже не компилируется из коробки больше. Надеемся, что владельцы проектов скоро вернутся. –

1

Look в каталоге Samples/OpenIdRelyingPartyMvc (простой веб-сайт ASP.NET MVC с использованием аутентификации OpenId). Вы можете начать с копирования Home/User Controllers/Views и настроек из web.config в ваш проект. Я считаю, что это самый быстрый способ предоставить аутентификацию OpenId на вашем сайте. Тогда, as Alexander Prokofyev said, есть очень полезный пост на Andrew Arnott's (DotNetOpenAuth/DotNetOpenId author) blog - Add OpenID login support to your ASP.NET MVC site

6

Хорошо, так что я получил такую ​​работу! Ответ представляет собой комбинацию ответов ниже, плюс некоторые из них с контроллерами и представлениями.

Первый download DotNetOpenAuth, а затем перейдите к каталогу образцов, где вы можете найти код OpenIdRelayingPartyMvc. В моем NerdDinner растворе,

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

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