我正在尝试使用DotNetOpenAuth(最新版本)来使用ASP.NET MVC 2网站。 我得到第一部分工作,当用户选择OpenID提供程序时调用操作,我得到正确的标识符传入,然后我被正确地重定向到提供者网站,我被重定向回我的网站,但这是问题。
我请求的声明为空(请参阅下面的代码)。
public ActionResult TryAuth(string openid_identifier)
{
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if(response== null)
{
var req = openid.CreateRequest(openid_identifier);
req.AddExtension(new ClaimsRequest
{
Email = DemandLevel.Require,
Nickname = DemandLevel.Require
});
return req.RedirectingResponse.AsActionResult();
}
switch(response.Status)
{
case AuthenticationStatus.Authenticated:
{
var data = response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
// data is null <-----------------------------------------
return View("Index");
}
}
return View("Index");
}
如果有人能指出我正在做的(不是那么)明显的错误,我将不胜感激。
答案 0 :(得分:5)
我遇到了同样的问题,直到我发现对于Google,您必须将电子邮件字段设置为DomainLevel.Require而不是DomainLevel.Request(可选)
fields.Email = DemandLevel.Require;
答案 1 :(得分:3)
请仔细阅读所有类似的问题。Refer this
您的代码看起来很好。请确保您在web.config文件中activate the AXFetchAsSregTransform,以最大限度地提高您获取回复的机会。然而,由提供商为您提供任何属性。像雅虎这样的一些提供商要求你的RP正确实现RP Discovery,DotNetOpenAuth附带的示例RP就是这样。
这是my blog post on getting RP Discovery done right。这样做,并尝试再次测试的网站。请记住,某些提供商会缓存RP Discovery结果,因此您可能会应用所有RP Discovery修复程序,但仍需等待一小时或一天,然后提供商才会开始向您提供数据。