【发布时间】:2012-07-16 21:02:54
【问题描述】:
我意识到 OpenID 有点庞然大物,或者比典型的注册表单更复杂,但我觉得我在这里遗漏了一些东西。
根据这个question,我应该保存我的提供者给我的唯一标识符密钥。
提供商将为您提供每个用户的唯一 ID - 这是您需要的 保存。这是您将如何匹配刚刚登录的用户 数据库中的一条记录。
在my code (taken from the MVC portion) 中,此唯一ID 在LogOn() 操作方法中的开关内部给出:
public ActionResult LogOn()
{
var openid = new OpenIdRelyingParty();
IAuthenticationResponse response = openid.GetResponse();
if (response != null)
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
FormsAuthentication.RedirectFromLoginPage(
response.ClaimedIdentifier, false); // <-------- ID HERE! "response.ClaimedIdentifier"
break;
case AuthenticationStatus.Canceled:
ModelState.AddModelError("loginIdentifier",
"Login was cancelled at the provider");
break;
case AuthenticationStatus.Failed:
ModelState.AddModelError("loginIdentifier",
"Login failed using the provided OpenID identifier");
break;
}
}
return View();
}
[HttpPost]
public ActionResult LogOn(string loginIdentifier)
{
if (!Identifier.IsValid(loginIdentifier))
{
ModelState.AddModelError("loginIdentifier",
"The specified login identifier is invalid");
return View();
}
else
{
var openid = new OpenIdRelyingParty();
IAuthenticationRequest request = openid.CreateRequest(Identifier.Parse(loginIdentifier));
// Require some additional data
request.AddExtension(new ClaimsRequest
{
BirthDate = DemandLevel.NoRequest,
Email = DemandLevel.Require,
FullName = DemandLevel.Require
});
return request.RedirectingResponse.AsActionResult();
}
}
我是否将此标识符用于FormsAuthentication.SetAuthCookie(IDHERE, true);?
如果我还想保存用户信息,例如电子邮件、姓名、昵称或其他信息,该怎么办。如何从依赖方获取此数据集合?如果此过程取决于我使用的提供程序,我使用的是 Steam OpenID 提供程序:
http://steamcommunity.com/openid http://steamcommunity.com/dev
【问题讨论】:
-
这是一个很好的例子,说明如何在 MVC3 应用程序中实现 OpenID。 weblogs.asp.net/haithamkhedre/archive/2011/03/13/… 我对 Steam 不熟悉,但其中大部分工作类似。这可能是一个很好的起点。
-
这个想法是您在逻辑上将本地用户信息“连接”到外部帐户,比如 Facebook。当您想从该 Facebook 帐户获取信息时,您需要保存 Facebook 用户 ID,这样您就不需要在本地检索和保存这些信息。
标签: c# asp.net-mvc-3 openid dotnetopenauth steam