Asp.net mvc 向NerdDinner ASP.NET MVC应用程序添加Openid支持的教程请求

Asp.net mvc 向NerdDinner ASP.NET MVC应用程序添加Openid支持的教程请求,asp.net-mvc,dotnetopenauth,nerddinner,Asp.net Mvc,Dotnetopenauth,Nerddinner,我希望通过ASP.NET MVC NerdDinner教程了解ASP.NET MVC和OpenId 我想将NerdDinner中的身份验证系统替换为仅OpenId。我已经下载了最新的DotNetOpenAuth库,但我不知道如何将它们组合在一起。有人能帮助我们快速地一步一步地学习教程吗 这就像放入库一样简单,还是需要对应用程序进行重大更改?codeplex上有一个会员入门工具包,这应该是您需要的。如果它们遵循microsoft身份验证约定,则它们都应该遵循提供程序模型(请仔细阅读) 不是Nerd

我希望通过ASP.NET MVC NerdDinner教程了解ASP.NET MVC和OpenId

我想将NerdDinner中的身份验证系统替换为仅OpenId。我已经下载了最新的DotNetOpenAuth库,但我不知道如何将它们组合在一起。有人能帮助我们快速地一步一步地学习教程吗


这就像放入库一样简单,还是需要对应用程序进行重大更改?

codeplex上有一个会员入门工具包,这应该是您需要的。如果它们遵循microsoft身份验证约定,则它们都应该遵循提供程序模型(请仔细阅读)


不是NerdDinner指定的,但对于那些希望在ASP.NET MVC应用程序中实现OpenId支持的用户来说可能很有用:


查看示例/OpenIdRelyingPartyMvc dir(一个使用OpenId身份验证的简单ASP.NET MVC网站)。您可以从将主页/用户控制器/视图和设置从web.config复制到项目开始。我认为这是给你的站点提供OpenId身份验证的最快方法。然后,在-

上有一篇非常有用的文章,下载后,请查看samples\RelyingPartyMvc目录。有一个示例,它们用OpenID替换默认的MVC身份验证系统。相关代码位于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();

好吧,所以我得到了这种工作! 答案是以下答案的组合,再加上一些控制器和视图的混乱

首先,然后导航到samples目录,在那里可以找到OpenIdRelayingPartyMvc代码。 在我的书呆子式解决方案中

  • 我添加了对DotNetOpenAuth程序集的引用
  • 添加了一个新的“UserController”,并从示例的UserController复制了代码
  • 添加了正确的using语句,并更改了命名空间以反映NerdDinner.Controllers
  • 从示例中重新创建类似的“用户”视图,对其进行适当更改以反映站点主内容id
  • 在主控制器下添加了一个xrds视图。(还不确定这有什么作用)
  • 更改了索引并在HomeController中添加Xrds ActionResult方法以反映示例
  • 更改了web.config文件(在根文件夹中)的Authenticate部分,以将登录路径更改为新的UserController和登录方法
  • 更改“LogOnUserControl”操作链接以指向新的UserControl以及“Login”和“Logout”方法
  • 使用直接调用登录功能的各种视图

目前,这种方法的效果有限。我可以使用OpenID登录NerdDinner应用程序并与之交互。所以这很酷。但是,有些功能还不起作用。保存创建的晚餐不起作用,但也不会挂起。我必须研究如何将AccountController中的一些成员资格功能迁移到UserController。我将更新这篇文章(欢迎提出建议和建议)

小心这一点。它已经过时好几个月了,甚至不再进行开箱即用的编译。希望项目负责人很快会修改它。我已经下载了代码并通读了说明,但仍然不清楚它们是如何结合在一起的。NerdDinner示例具有默认AccountController。认证和成员资格服务包含在AccountController中。上面的代码是否需要合并到该控制器中?上面的代码使用一个名为UserController的控制器。这基本上是AccountController的替代品。您只需要更新链接或路由以相应地指向它。此示例似乎使用的是dotnetopenid包,而不是取代它的较新的dotnetopenauth包。