我正在寻找使用 ASP.NET MVC NerdDinner 教程来了解 ASP.NET MVC 和 OpenId。
我想将 NerdDinner 中的身份验证系统替换为仅 OpenId。我已经下载了最新的 DotNetOpenAuth 库,但我不确定如何将它们放在一起。任何人都可以提供快速的分步教程吗?
这就像放入库中一样简单,还是应用程序也需要进行重大更改?
我正在寻找使用 ASP.NET MVC NerdDinner 教程来了解 ASP.NET MVC 和 OpenId。
我想将 NerdDinner 中的身份验证系统替换为仅 OpenId。我已经下载了最新的 DotNetOpenAuth 库,但我不确定如何将它们放在一起。任何人都可以提供快速的分步教程吗?
这就像放入库中一样简单,还是应用程序也需要进行重大更改?
下载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();
不是 NerdDinner 规范,但对于想要在其 ASP.NET MVC 应用程序中实现 OpenId 支持的人可能很有用:
好的,所以我得到了这种工作!答案是以下答案的组合,再加上控制器和视图的一些处理。
首先下载 DotNetOpenAuth,然后导航到示例目录,您可以在其中找到 OpenIdRelayingPartyMvc 代码。在我的 NerdDinner 解决方案中,
现在,这以有限的方式起作用。我可以使用 OpenID 登录 NerdDinner 应用程序并与之交互。所以这很酷。然而,一些功能还没有工作。保存创建的晚餐不起作用,但它也不会挂起。我将不得不研究如何将 AccountController 中的一些成员资格功能迁移到 UserController。我会更新这篇文章(欢迎提出建议和指点)。
查看 Samples/OpenIdRelyingPartyMvc 目录(一个使用 OpenId 身份验证的简单 ASP.NET MVC 网站)。您可以从将 Web.config 中的 Home/User Controllers/Views 和设置复制到您的项目中开始。我认为这是为您的网站提供 OpenId 身份验证的最快方法。然后,正如 Alexander Prokofyev 所说,在Andrew Arnott 的(DotNetOpenAuth/DotNetOpenId 作者)博客上有非常有用的帖子-将 OpenID 登录支持添加到您的 ASP.NET MVC 站点
codeplex 上有一个会员入门工具包,应该是您正在寻找的。如果他们遵循微软身份验证约定,他们都应该遵循提供者模型(阅读它)。