【发布时间】:2009-07-04 16:10:18
【问题描述】:
我试图弄清楚如何在通过开放 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> 仍然返回 null。此外,返回的 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
【问题讨论】:
-
你能包括你正在测试的 OP 吗?
-
行为配置将导致 ClaimsResponse 始终存在,即使没有任何值,正如您所说。看起来您的代码是正确的,并且由于 myopenid 同时支持 sreg 和 AX,我很惊讶这对您不起作用。我会看看我是否可以做更多的调查。
-
我在我的回答中添加了一条关于针对 myopenid.com 进行测试的评论,因为我想这就是您遇到的问题。也只是一个提示,如果您将其逐字保留在 wiki 页面中,则您添加到 web.config 文件中的安全标记不是必需的。这些都是默认值。我在这里看到的唯一重大变化是您将“localhost”添加为白名单主机以及我们讨论的行为。
标签: openid dotnetopenauth