C# DotNetOpenAuth ClaimsResponse使用统一库v4.0+;返回Null+;谷歌OpenId
对此我真的很困惑,我知道有几篇类似的重复文章,读了不少书,我对ClaimsResponse(至少我认为我知道)有一些了解,它同时使用SREG和AX信息,以及启用AXFetchAsSregTransform的web.config配置,如何使用ClaimsRequest获取带有DemandLevel.Require的Google电子邮件。我试图做的是让我的示例在v4.0之后使用统一的DotNetOpenAuth.dll库作为对我的项目的单个引用而不是nuget包工作(示例使用自)。此示例适用于DotNetOpenAuth-3.4.7.11121版本。如果有人能给我一些关于这个问题的信息,我将不胜感激。当我创建请求并使用DotNetOpenAuth.dll v3.4.7时,一切都很顺利: 公共IAAuthenticationRequestValidateOpenIdProvider(字符串 openIdIdentifier、领域域、Uri返回URL) {C# DotNetOpenAuth ClaimsResponse使用统一库v4.0+;返回Null+;谷歌OpenId,c#,asp.net-mvc-4,openid,dotnetopenauth,C#,Asp.net Mvc 4,Openid,Dotnetopenauth,对此我真的很困惑,我知道有几篇类似的重复文章,读了不少书,我对ClaimsResponse(至少我认为我知道)有一些了解,它同时使用SREG和AX信息,以及启用AXFetchAsSregTransform的web.config配置,如何使用ClaimsRequest获取带有DemandLevel.Require的Google电子邮件。我试图做的是让我的示例在v4.0之后使用统一的DotNetOpenAuth.dll库作为对我的项目的单个引用而不是nuget包工作(示例使用自)。此示例适用于Dot
OpenIdUser user = null;
IAuthenticationResponse openIdResponse = openId.GetResponse();
if (openIdResponse.IsSuccessful())
{
user = ResponseIntoUser(openIdResponse);
}
return user;
}
OpenIdUser user = null;
var claimResponseUntrusted = response.GetUntrustedExtension<ClaimsResponse>();
var claimResponse = response.GetExtension<ClaimsResponse>();
if (claimResponse != null)
{
user = new OpenIdUser(claimResponse, response.ClaimedIdentifier);
}
else if (claimResponseUntrusted != null)
{
user = new OpenIdUser(claimResponseUntrusted, response.ClaimedIdentifier);
}
return user;
}
var user = openidemembership.GetUser();
if (user != null)
{
//Create cookie and redirect the user back
return new RedirectResult(Request.Params["ReturnUrl"] ?? "/");
}
return View();
}
IAAuthenticationRequest openIdRequest=openId.CreateRequest(Identifier.Parse(openIdIdentifier)),领域,
返回URL)
以及将用户重定向到服务提供商:
var response=openidemembership.ValidateAtOpenIdProvider(标识符,
领域,新Uri(“DomainUrl或Localhost/GoogleCallback”)
将用户重定向回后,将调用这两种方法:
公共OpenIdUser GetUser()
{
OpenIdUser user = null;
IAuthenticationResponse openIdResponse = openId.GetResponse();
if (openIdResponse.IsSuccessful())
{
user = ResponseIntoUser(openIdResponse);
}
return user;
}
OpenIdUser user = null;
var claimResponseUntrusted = response.GetUntrustedExtension<ClaimsResponse>();
var claimResponse = response.GetExtension<ClaimsResponse>();
if (claimResponse != null)
{
user = new OpenIdUser(claimResponse, response.ClaimedIdentifier);
}
else if (claimResponseUntrusted != null)
{
user = new OpenIdUser(claimResponseUntrusted, response.ClaimedIdentifier);
}
return user;
}
var user = openidemembership.GetUser();
if (user != null)
{
//Create cookie and redirect the user back
return new RedirectResult(Request.Params["ReturnUrl"] ?? "/");
}
return View();
}
私有OpenIdUser ParseResponse(IAAuthenticationResponse)
{
OpenIdUser user = null;
IAuthenticationResponse openIdResponse = openId.GetResponse();
if (openIdResponse.IsSuccessful())
{
user = ResponseIntoUser(openIdResponse);
}
return user;
}
OpenIdUser user = null;
var claimResponseUntrusted = response.GetUntrustedExtension<ClaimsResponse>();
var claimResponse = response.GetExtension<ClaimsResponse>();
if (claimResponse != null)
{
user = new OpenIdUser(claimResponse, response.ClaimedIdentifier);
}
else if (claimResponseUntrusted != null)
{
user = new OpenIdUser(claimResponseUntrusted, response.ClaimedIdentifier);
}
return user;
}
var user = openidemembership.GetUser();
if (user != null)
{
//Create cookie and redirect the user back
return new RedirectResult(Request.Params["ReturnUrl"] ?? "/");
}
return View();
}
Web.Config
<section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true" />
<dotNetOpenAuth>
<openid>
<relyingParty>
<behaviors>
<add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
</behaviors>
</relyingParty>
</openid>
</dotNetOpenAuth>
在使用DotNetOpenAuth.dll v4.0+++之后,在ParseResponse方法调用内部,我无法从ClaimsResponse中获取任何值。我使用的是命名空间DotNetOpenAuth.OpenId.Extensions.SimpleRegistration。使用nuget一切都很好,但是有没有其他方法可以让它与单个dll一起工作,我真的不想添加所有这些引用我现在正在为我的一位客户处理现有的项目,请提前感谢。更新您的web.config文件以使用
DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform
(注意名称空间中添加“RelyingParty”的更改)在v4.x中,DotNetOpenAuth移动了行为的名称空间以支持多程序集构建,甚至影响了统一程序集版本
<dotNetOpenAuth>
<openid>
<relyingParty>
<behaviors>
<add type="DotNetOpenAuth.OpenId.RelyingParty.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
</behaviors>
</relyingParty>
</openid>
</dotNetOpenAuth>
此外,即使您需要统一程序集,也可以使用NuGet获取DotNetOpenAuth:
安装软件包DotNetOpenAuth.Ultimate
Andrew-非常感谢您的快速回答。NuGet软件包DotNetOpenAuth.Ultimate确实有效,但我已尝试按照建议将名称空间包含在web.config文件中,但问题仍然存在。除非没有更干净的解决方案,否则我宁愿避免使用NuGet。非常感谢,致以最良好的祝愿。如果需要进一步调试,请重新运行该方案并将日志附加到您的问题。很抱歉没有尽快回复。似乎我没有正确设置我的web配置文件。通过上述设置并按照建议更改命名空间,代码确实适用于v4+,但仅适用于FetchResponse,而不适用于ClaimsResponse。在我将web.config文件更改为sectionGroup之后(正如NuGet package DotNetOpenAuth.Ultimate)中包含openid、oauth、消息和报告部分的ClaimsResponse开始工作。感谢您的时间和关注,Andrew,您帮助了我很多。继续做好工作!