Я расширил образец DotNetOpenAuth ASP.NET MVC Login
, пытаясь получить хотя бы электронное письмо от поставщика OpenID. Независимо от того, какого провайдера я использую для входа, я получаю null
для ClaimsResponse
. Вот код.
var request = openid.CreateRequest(Request.Form["OpenID"]);
// Require some additional data
request.AddExtension(new ClaimsRequest
{
Email = DemandLevel.Require,
});
return request.RedirectingResponse.AsActionResult();
И это фрагмент, чтобы получить ClaimsResponse
:
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
var claimsResponse = response.GetExtension<ClaimsResponse>();
// This is null!
break;
}
Прежде чем попробовать это на примере MVC, я сделал тот же на примере WebForms и получил запрошенное письмо! Но это действительно трудно ошибиться, так как код, связанный с OpenID, практически одинаков.
Я заметил, что сгенерированные URL-адреса OpenID отличаются следующим: openid.ns.alias3=http://openid.net/srv/ax/1.0&openid.alias3.required=alias1,alias2,alias3,alias4&openid.alias3.mode=fetch_request&openid.alias3.type.alias1=http://axschema.org/contact/email&openid.alias3.count.alias1=1&openid.alias3.type.alias2=http://axschema.org/namePerson&openid.alias3.count.alias2=1&openid.alias3.type.alias3=http://schema.openid.net/contact/email&openid.alias3.count.alias3=1&openid.alias3.type.alias4=http://schema.openid.net/namePerson&openid.alias3.count.alias4=1
. По сути, версия WebForms генерирует URL со всем добавленным, в то время как в MVC URL этого нет. В итоге электронная почта представляется в WebForms, а для приложения MVC ее нет.
Последнее, что я заметил, это, например, Google показывает, что запрос поступил от localhost
для приложения WebForms и 127.0.0.1
для приложения MVC. Может быть, это имеет все значение. Тем не менее, я не уверен, контролирую ли я здесь.
Меня беспокоит то, что код одинаков для обоих проектов. Тем не менее, сгенерированные URL-адреса отличаются, и MVC не получает электронную почту.