4
我剛開始嘗試DotNetOpenAuth項目。修改樣本OpenIdRelyingPartyMvc項目,我能夠獲得ClaimRequest
的電子郵件與谷歌合作。爲什麼我的ClaimsRequest會返回null?
但是,當我嘗試將OpenID添加到我自己的項目中時,ClaimResponse始終返回null。我想知道是否有我缺少的項目或環境設置?
這裏是我的Authenticate
方法:
public ActionResult Authenticate(string returnUrl)
{
var response = openid.GetResponse();
if (response == null)
{
// Stage 2: user submitting Identifier
Identifier id;
if (Identifier.TryParse(Request.Form["openid_identifier"], out id))
{
try
{
IAuthenticationRequest req = openid.CreateRequest(Request.Form["openid_identifier"]);
req.AddExtension(new ClaimsRequest { Email = DemandLevel.Require });
return req.RedirectingResponse.AsActionResult();
}
catch (ProtocolException ex)
{
ViewData["Message"] = ex.Message;
return View("Login");
}
}
else
{
ViewData["Message"] = "Invalid identifier";
return View("Login");
}
}
else
{
// Stage 3: OpenID Provider sending assertion response
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
ClaimsResponse sreg = response.GetExtension<ClaimsResponse>();
if (sreg != null)
{
var email = sreg.Email;
Session["Email"] = email;
}
Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
FormsAuthentication.SetAuthCookie(response.ClaimedIdentifier, false);
if (!string.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
case AuthenticationStatus.Canceled:
ViewData["Message"] = "Canceled at provider";
return View("Login");
case AuthenticationStatus.Failed:
ViewData["Message"] = response.Exception.Message;
return View("Login");
}
}
return new EmptyResult();
}
}