Запросить учебник для добавления поддержки Openid в приложение NerdDinner ASP.NET MVC
Я изучаю ASP.NET MVC и OpenId с помощью учебника по ASP.NET MVC NerdDinner.
Я хотел бы заменить систему аутентификации в NerdDinner на OpenId. Я скачал последние библиотеки DotNetOpenAuth, но я не уверен, как все это собрать. Может ли кто-нибудь помочь с быстрым пошаговым руководством?
Это так же просто, как перенести в библиотеку, или в приложение также необходимо внести существенные изменения?
5 ответов
Как только вы загрузите 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();
Не спецификация NerdDinner, но может быть полезна для тех, кто хочет реализовать поддержку OpenId в своем приложении ASP.NET MVC:
Итак, у меня такая работа! Ответ представляет собой комбинацию ответов ниже, а также некоторые игры с контроллерами и представлениями.
Сначала загрузите DotNetOpenAuth, а затем перейдите в каталог примеров, где вы можете найти код OpenIdRelayingPartyMvc. В моем решении NerdDinner,
- Я добавил ссылку на сборку DotNetOpenAuth
- добавлен новый "UserController" и скопирован в код из примера UserController
- добавлены правильные операторы using и изменено пространство имен для отражения NerdDinner.Controllers
- воссоздали аналогичные "Пользовательские" представления из примера, изменив их соответствующим образом, чтобы отразить идентификаторы основного содержимого сайта.
- добавлено представление xrds под домашним контроллером. (не уверен, что это делает еще)
- изменили индекс и добавьте методы Xrds ActionResult в HomeController, чтобы отразить образец.
- изменил файл web.config (в корневой папке) в разделе Authenticate, чтобы изменить путь входа в систему на новый метод UserController и Login
- Измените ActionLinks "LogOnUserControl", чтобы они указывали на новые методы UserControl и "Login" и "Logout".
- возиться с различными представлениями, которые напрямую вызывают функциональность входа в систему
Сейчас это работает ограниченным образом. Я могу войти в систему и взаимодействовать с приложением NerdDinner с помощью OpenID. Так что это круто. Однако некоторые функции еще не работают. Сохранение созданного ужина не работает, но и не зависает. Мне придется изучить, как перенести некоторые функции членства в AccountController в UserController. Я буду обновлять этот пост (предложения и указатели приветствуются).
Посмотрите на каталог Samples/OpenIdRelyingPartyMvc (простой веб-сайт ASP.NET MVC, использующий аутентификацию OpenId). Вы можете начать с копирования Home/User Controllers/Views и настроек из web.config в ваш проект. Я думаю, что это самый быстрый способ дать вашему сайту аутентификацию OpenId. Затем, как сказал Александр Прокофьев, в блоге Эндрю Арнотта (автор DotNetOpenAuth/DotNetOpenId) есть очень полезный пост - добавьте поддержку входа в систему OpenID на свой сайт ASP.NET MVC.
На codeplex есть стартовый комплект для членов, который должен быть тем, что вы ищете. Они оба должны следовать модели провайдера (читайте об этом), если они следуют соглашению об аутентификации Microsoft.