gpt4 book ai didi

openid - 无法从 DotNetOpenId 响应中获取属性

转载 作者:行者123 更新时间:2023-12-04 11:17:50 24 4
gpt4 key购买 nike

我试图弄清楚如何在通过 open id 验证后获取用户信息。每当我打电话时,我是否提供 ClaimsRequest 或 FetchRequest 都没有关系

response.GetExtension<ClaimsResponse>

//Or

response.GetExtension<FetchResponse>

//Or

response.GetUntrustedExtension<ClaimsResponse>

// OR

response.GetUntrustedExtension<FetchResponse>

我总是得到一个空引用。我正在添加信息,就像在我看到的所有示例中一样:
request.AddExtension(new ClaimsRequest{ Email = DemandLevel.Require });

// Or

var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
request.AddExtension(fetch);

知道我做错了什么吗?

更新

添加 Andrew 建议的配置信息让我参与了其中。我终于通过 response.GetUntrustedExtension<ClaimsResponse> 收到了 ClaimsResponse然而 response.GetExtension<ClaimsResponse>仍然返回空值。此外,返回的 ClaimsResponse 实际上并不包含我请求的任何数据。这是请求:
var request = openId.CreateRequest(Request.Form["openid_identifier"]);
request.AddExtension(new ClaimsRequest
{
BirthDate = DemandLevel.Request,
Country = DemandLevel.Request,
Email = DemandLevel.Require,
FullName = DemandLevel.Request,
Gender = DemandLevel.Request,
Language = DemandLevel.Request,
Nickname = DemandLevel.Request,
PostalCode = DemandLevel.Request,
TimeZone = DemandLevel.Request
});

return request.RedirectingResponse.AsActionResult();

这是我的配置
  <uri>
<idn enabled="All"/>
<iriParsing enabled="true"/>
</uri>
<dotNetOpenAuth>
<openid maxAuthenticationTime="0:05">
<relyingParty>
<security
requireSsl="false"
minimumRequiredOpenIdVersion="V10"
minimumHashBitLength="160"
maximumHashBitLength="256"
requireDirectedIdentity="false"
requireAssociation="false"
rejectUnsolicitedAssertions="false"
rejectDelegatingIdentifiers="false"
ignoreUnsignedExtensions="false"
privateSecretMaximumAge="07:00:00" />
<behaviors>
<add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
</behaviors>
</relyingParty>
</openid>
<messaging>
<untrustedWebRequest>
<whitelistHosts>
<!-- since this is a sample, and will often be used with localhost -->
<add name="localhost" />
</whitelistHosts>
</untrustedWebRequest>
</messaging>

我正在运行 v3.2.0.9177

最佳答案

很可能您正在测试的 Provider 不支持这些扩展。或者,如果是谷歌,它只回答一次问题(除非在登录时你小心不要勾选记住我)。

现在使用 DotNetOpenAuth v3.2,发送扩展的最佳方式可能是使用新的属性扩展“行为”。如果提供者完全支持这些扩展中的任何一个,它将根据提供者自动使用 sreg 和/或 AX(最多三种不同的 AX 格式),以最大限度地提高您获得有用结果的机会。

将此位粘贴到您的 web.config 文件中,在 full configuration wiki page 中建议的位置.

<behaviors>
<add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
</behaviors>

然后使用 ClaimsRequest/ ClaimsResponse (sreg) 而不是 AX' FetchRequest以便行为可以发挥作用。

由于您提到您正在针对 myopenid.com 进行测试,因此当您测试位于“本地主机”上的 RP 时,我还将提醒您他们似乎关闭了扩展支持。您的 RP 显然必须是公开的,甚至可能是可发现的(根据 RP 发现的 OpenID 2.0 规则)才能满足属性请求。这可能就是你遇到的问题。

关于openid - 无法从 DotNetOpenId 响应中获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com