26

我正在寻找使用 ASP.NET MVC NerdDinner 教程来了解 ASP.NET MVC 和 OpenId。

我想将 NerdDinner 中的身份验证系统替换为仅 OpenId。我已经下载了最新的 DotNetOpenAuth 库,但我不确定如何将它们放在一起。任何人都可以提供快速的分步教程吗?

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

4

5 回答 5

14

下载dotnetopenid 后,查看 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();
于 2009-06-02T14:02:01.230 回答
7

不是 NerdDinner 规范,但对于想要在其 ASP.NET MVC 应用程序中实现 OpenId 支持的人可能很有用:

于 2009-06-01T09:52:32.400 回答
6

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

首先下载 DotNetOpenAuth,然后导航到示例目录,您可以在其中找到 OpenIdRelayingPartyMvc 代码。在我的 NerdDinner 解决方案中,

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

现在,这以有限的方式起作用。我可以使用 OpenID 登录 NerdDinner 应用程序并与之交互。所以这很酷。然而,一些功能还没有工作。保存创建的晚餐不起作用,但它也不会挂起。我将不得不研究如何将 AccountController 中的一些成员资格功能迁移到 UserController。我会更新这篇文章(欢迎提出建议和指点)。

于 2009-06-03T22:17:37.040 回答
1

查看 Samples/OpenIdRelyingPartyMvc 目录(一个使用 OpenId 身份验证的简单 ASP.NET MVC 网站)。您可以从将 Web.config 中的 Home/User Controllers/Views 和设置复制到您的项目中开始。我认为这是为您的网站提供 OpenId 身份验证的最快方法。然后,正如 Alexander Prokofyev 所说,在Andrew Arnott 的(DotNetOpenAuth/DotNetOpenId 作者)博客上有非常有用的帖子-将 OpenID 登录支持添加到您的 ASP.NET MVC 站点

于 2009-06-01T17:47:18.443 回答
0

codeplex 上有一个会员入门工具包,应该是您正在寻找的。如果他们遵循微软身份验证约定,他们都应该遵循提供者模型(阅读它)。

http://mvcmembership.codeplex.com/

于 2009-06-01T08:31:53.500 回答