我意识到 OpenID 有点像庞然大物,或者比典型的注册表单更复杂,但我觉得我在这里遗漏了一些东西。
根据这个问题,我应该保存我的提供者给我的唯一标识符密钥。
提供商将为您提供每个用户的唯一 ID - 您需要保存此 ID。这是您将刚刚登录的用户与数据库中的记录相匹配的方式。
在我的代码(取自 MVC 部分)LogOn()
中,此唯一 ID 在操作方法中的开关内给出:
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