Mic*_*cah 7 openid dotnetopenauth
我试图弄清楚如何通过open id验证后获取用户信息.如果我在呼叫时提供ClaimsRequest或FetchRequest并不重要
response.GetExtension<ClaimsResponse>
//Or
response.GetExtension<FetchResponse>
//Or
response.GetUntrustedExtension<ClaimsResponse>
// OR
response.GetUntrustedExtension<FetchResponse>
Run Code Online (Sandbox Code Playgroud)
我总是得到一个空引用.我正在添加信息,就像我看到的所有示例一样:
request.AddExtension(new ClaimsRequest{ Email = DemandLevel.Require });
// Or
var fetch = new FetchRequest();
fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
request.AddExtension(fetch);
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
更新
添加安德鲁建议的配置信息让我成为了那里的一部分.我终于得到一个ClaimsResponse,response.GetUntrustedExtension<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();
Run Code Online (Sandbox Code Playgroud)
这是我的配置
<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>
Run Code Online (Sandbox Code Playgroud)
我正在运行v3.2.0.9177
And*_*ott 10
您正在测试的提供商很可能不支持这些扩展.或者,如果它是谷歌,它只回答一次问题(除非在登录时你小心不要记住我记得).
现在使用DotNetOpenAuth v3.2,发送扩展的最佳方式可能是使用新的属性扩展"行为".它将自动使用sreg和/或AX(最多三种不同的AX格式),具体取决于提供商,以便在提供商支持任何这些扩展时最大限度地获得有用结果的机会.
将此位粘贴在web.config文件中,完整配置wiki页面中的建议.
<behaviors>
<add type="DotNetOpenAuth.OpenId.Behaviors.AXFetchAsSregTransform, DotNetOpenAuth" />
</behaviors>
Run Code Online (Sandbox Code Playgroud)
然后使用ClaimsRequest/ ClaimsResponse(sreg)代替AX',FetchRequest以便行为可以完成其工作.
既然你提到你正在对myopenid.com进行测试,那么当你测试'localhost'上的RP时,我也会忽略它们似乎已经关闭了扩展支持.您的RP显然必须是公开的,甚至可以发现(根据RP发现的OpenID 2.0规则),以便尊重属性请求.这可能是你遇到的.
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |