DotNetOpenAuth 3.4: звонки в Yahoo! перестать возвращать ответы, иногда влияет на Google тоже

  • DotNetOpenAuth 3.4.1.10044
  • Windows 7 (64-разрядная версия)
  • VS 2008 SP1,.NET 3.5, C#
  • Windows Azure

КодASP.NET за фрагментом вокруг вызова OpenID:

OpenIdRelyingParty rp = new OpenIdRelyingParty(null);
string discoveryUri = "";
if (provider == "google") {
    discoveryUri = "https://www.google.com/accounts/08/id";
    Application.Set("Provider", "Google");
} else if (provider == "yahoo") {
    discoveryUri = "https://me.yahoo.com";
    Application.Set("Provider", "Yahoo");
}
try {
    string openIdUri = Request.Url.ToString();
    var b = new UriBuilder(openIdUri) { Query = "" };
    Response.Write("OpenId_Click: Request.Url = " + Request.Url);
    var req = rp.CreateRequest(discoveryUri, b.Uri, b.Uri);
    Response.Write("OpenId_Click: discoveryUri = " + discoveryUri);
    try {
        req.RedirectToProvider();
    } catch (ThreadAbortException tae) {
        string taem = tae.Message;
    }
} catch (Exception ex) {
    string s = ex.Message;
}
rp.Dispose();

У меня есть следующие (3) поведения:

Когда я впервые запускаю ASP.NET (хранилище разработки Azure), если я аутентифицируюсь на Yahoo!, это успешно. Если я попытаюсь пройти аутентификацию против Yahoo! Минуту спустя, вызов RedirectToProvider никогда не возвращает ответ. После этого дополнительные звонки в Google и Yahoo! Не возвращайте ответ.

Когда я впервые запускаю ASP.NET, если я аутентифицируюсь на Google, это успешно. Если я попытаюсь снова аутентифицироваться в Google через минуту, вызов RedirectToProvider будет успешным без запроса моего имени пользователя / пароля. (Я не установил флажок запомнить меня). После этого дополнительные звонки в Google остаются успешными. (Кажется, Google кеширует результаты первого запроса.) Если я проверю подлинность на Yahoo! вызов RedirectToProvider никогда не возвращает ответ. Если я вернусь в Google, я снова добьюсь успеха, не спросив у меня имя пользователя / пароль.

Когда я впервые запускаю ASP.NET (хранилище разработки Azure), если я аутентифицируюсь на Yahoo!, это успешно. Если я попытаюсь пройти аутентификацию в Google через минуту, вызов RedirectToProvider никогда не вернет ответ.

Нет очевидного сбоя (кроме обычного шума ThreadAbortException, который, кажется, возникает независимо от того, успешны ли вызовы).

Есть идеи о том, что может происходить?

Вот некоторая информация трассировки из третьего случая, когда Yahoo! Успешно, то Google не

Очередь синхронизации, созданная с помощью одного сообщения ==> Занято: информация [WaWebHost.exe] DotNetOpenAuth, версия =3.4.1.10044, культура = нейтральная, PublicKeyToken=2780ccd10d57b246 (официальная)
[WaWebHost.exe] Повышение минимального требования к версии OpenID для провайдеров до 2.0 чтобы защитить этот RP без состояния от повторных атак.
[WaWebHost.exe] При составлении отчетов будет использоваться изолированное хранилище с областью действия: пользователь, домен, сборка [WaWebHost.exe] HTTP GET https://me.yahoo .com/
[WaWebHost.exe] X-XRDS-Location, найденная в заголовке HTTP. Подготовка к извлечению XRDS из https://open.login.yahooapis.com/openid20/www.yahoo.com/xrds
[WaWebHost.exe] HTTP GET https://open.login.yahooapis.com/openid20/www.yahoo.com/xrds
[WaWebHost.exe] Всего служб, обнаруженных в XRDS: 1
[WaWebHost.exe] [{
    ClaimedIdentifier: http://specs.openid.net/auth/2.0/identifier_select
    ProviderLocalIdentifier: http://specs.openid.NET / auth / 2.0 / identifier_select ProviderEndpoint: https://open.login.yahooapis.com/openid/op/auth Версия OpenID: 2.0 URI типа службы:
        http://specs.openid.net/auth/2.0/server
        http://specs.openid.net/extensions/pape/1.0
        http://openid.net/sreg/1.0
        http://openid.net/extensions/sreg/1.1
        http://openid.net/srv/ax/1.0
        http://specs.openid.net/extensions/oauth/1.0
        http://specs.openid.net/extensions/ui/1.0/lang-pref
        http://specs.openid.net/extensions/ui/1.0/mode/popup
        http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier
        http://www.idmanagement.gov/schema/2009/05/icam/no-pii.pdf
        http://www.idmanagement.gov/schema/2009/05/icam/openid-trust-level1.pdf
        http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf
},]
[WaWebHost.exe] Пропуск обнаружения HTML, поскольку XRDS содержит конечные точки обслуживания.
[WaWebHost.exe] Выполнение обнаружения по предоставленному пользователем идентификатору: https://me.yahoo.com/
[WaWebHost.exe] Создание запроса аутентификации для предоставленного пользователем идентификатора: https://me.yahoo.com/ [WaWebHost.exe ] Подготовка к отправке сообщения CheckIdRequest (2.0).
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement, примененный к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.RelyingPartySecurityOptions не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.BackwardCompatibilityBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement не применяется к сообщению.
[WaWebHost.exe] Отправка сообщения: CheckIdRequest
[WaWebHost.exe] Перенаправление на https://open.login.yahooapis.com/openid/op/auth?openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity= HTTP%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.return_to= HTTP%3A%2F%2F127.0.0.1%3A5100%2FOpenId.aspx%3Fdnoa.userSuppliedIdentifier%3Dhttps%253A%252F%252Fme.yahoo.com&openid.realm= HTTP%3A%2F%2F127.0.0.1%3A5100%2FOpenId.aspx&openid.mode=checkid_setup&openid.ns= HTTP% 3A% 2F% 2Fspecs. openid.net% 2Fauth% 2F2.0 [WaWebHost.exe] Повышение минимального требования к версии OpenID для провайдеров до 2.0, чтобы защитить этот RP без сохранения состояния от атак воспроизведения.
[WaWebHost.exe] Входящий HTTP-запрос: GET http://127.0.0.1:5100/OpenId.aspx?dnoa.userSuppliedIdentifier=https%3A%2F%2Fme.yahoo.com&openid.ns=http%3A%2F%2Fspecs. openid.net% 2Fauth% 2F2.0 & openid.mode = id_res &openid.return_to= HTTP% 3A% 2F% 2F127.0.0.1% 3A5100% 2FOpenId.aspx% 3Fdnoa.userSuppliedIdentifier% 3Dhttps% 253A% 252F% 252Fme.yahoo.com & OpenId. claimed_id = HTTPS%3A%2F%2Fme.yahoo.com%2fa%2FXLKt_2gxi_gDtLXSO4IyPi6gz3xDxA-%23afa8c&openid.identity= HTTPS%3A%2F%2Fme.yahoo.com%2fa%2FXLKt_2gxi_gDtLXSO4IyPi6gz3xDxA- & openid.realm = HTTP%3A%2F%2F127.0.0.1%3A5100%2FOpenId.aspx&openid.assoc_handle=kCG5j8w0Czja2yJ.JumEVy3SNaHp4aZQ4AdjguIo.OU2SrcpQsEtBxiZvqP_wP9Yf03KI_eOet5.Qsbv2Ov7MXEyGdVP4b4p4Cewoent7pmFNBxanpkYCg_W_zvJXkUo&openid.response_nonce=2010-03-04T19%3A48%3A00ZT3svYxSveINSAkkLdpO.IApS8NhEBBSdLQ- &openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce%2Creturn_to%2Csigned%2Cpape.auth_level.nist&openid.op_endpoint= HTTPS%3A%2F%2Fopen.login.yahooapis.com%2Fopenid%2Fop%2Fauth&openid.pape.auth_level.nist=0&openid.sig=mnpe8U7hLo3XBpUnmuX2tRgPwHA%3D
[WaWebHost.exe] Получен входящий запрос: сообщение об ошибке [WaWebHost.exe] Проверка подписи входящего сообщения PositiveAssertionResponse: mnpe8U7hLo3XBpUnmuX2tRgPwHA=
[WaWebHost.exe] Подготовка к отправке сообщения CheckAuthenticationRequest (2.0).
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.RelyingPartySecurityOptions не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.BackwardCompatibilityBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement не применяется к сообщению.
[WaWebHost.exe] Отправка запроса CheckAuthenticationRequest.
[WaWebHost.exe] HTTP POST https://open.login.yahooapis.com/openid/op/auth
[WaWebHost.exe] Получен ответ CheckAuthenticationResponse.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.BackwardCompatibilityBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.RelyingPartySecurityOptions не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement, примененный к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement, примененный к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.RelyingPartySecurityOptions, примененный к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement, примененный к сообщению.
[WaWebHost.exe] Проверка соответствия совпадает с результатами обнаружения идентификатора...
[WaWebHost.exe] HTTP GET https://me.yahoo.com/a/XLKt_2gxi_gDtLXSO4IyPi6gz3xDxA--#afa8c
[WaWebHost.exe] X-XRDS-расположение найдено в HTTP заголовок. Подготовка к извлечению XRDS из https://open.login.yahooapis.com/openid20/user_profile/xrds
[WaWebHost.exe] HTTP GET https://open.login.yahooapis.com/openid20/user_profile/xrds
[WaWebHost.exe] Всего служб, обнаруженных в XRDS: 1
[WaWebHost.exe] [{
    ClaimedIdentifier: https://me.yahoo.com/a/XLKt_2gxi_gDtLXSO4IyPi6gz3xDxA--#afa8c
    ProviderLocalIdentifier: https://me.yahoo.com/a/XLiAx_g2 - # afa8c ProviderEndpoint: https://open.login.yahooapis.com/openid/op/auth Версия OpenID: 2.0 URI типа службы: http://specs.openid.net/auth/2.0/signon http: // specs.openid.net / extensions / pape / 1.0 http://openid.net/sreg/1.0 http://openid.net/extensions/sreg/1.1 http://openid.net/srv/ax/1.0 http: / /specs.openid.net/extensions/oauth/1.0 http://specs.openid.net/extensions/ui/1.0/lang-pref http://specs.openid.net/extensions/ui/1.0/mode/popup http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier http://www.idmanagement.gov/schema/2009/05/icam/no-pii.pdf http: // www. IDMA nagement.gov/schema/2009/05/icam/openid-trust-level1.pdf http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf},] [WaWebHost.exe] Пропуск обнаружения HTML, потому что XRDS содержал конечные точки службы.
[WaWebHost.exe] Получено подтверждение личности для https://me.yahoo.com/a/XLKt_2gxi_gDtLXSO4IyPi6gz3xDxA--#afa8c через https://open.login.yahooapis.com/openid/op/auth.
[WaWebHost.exe] Повышение минимального требования к версии OpenID для провайдеров до 2.0, чтобы защитить этот RP без сохранения состояния от атак воспроизведения.
[WaWebHost.exe] Входящий HTTP-запрос: GET http://127.0.0.1:81/OpenId.aspx?provider=Yahoo&email=rjf@surfmark.com&userid=XLKt_2gxi_gDtLXSO4IyPi6gz3xDxA-- [требование WaWebHost для минимальной версии OpenWid для RaID] 2.0, чтобы защитить этот RP без состояния от повторных атак.
[WaWebHost.exe] HTTP GET https://www.google.com/accounts/o8/id
[WaWebHost.exe] Ответ XRDS был получен от GET по предоставленному пользователем идентификатору.
[WaWebHost.exe] Всего служб, обнаруженных в XRDS: 1
[WaWebHost.exe] [{
    ClaimedIdentifier: http://specs.openid.net/auth/2.0/identifier_select
    ProviderLocalIdentifier: http://specs.openid.net/auth/2.0/identifier_select
    ProviderEndpoint: https://www.google.com/accounts/o8/ud Версия OpenID: 2.0 URI типа службы:
        http://specs.openid.net/auth/2.0/server
        http://openid.net/srv/ax/1.0
        http://specs.openid.net/extensions/ui/1.0/mode/popup
        http://specs.openid.net/extensions/ui/1.0/icon
        http://specs.openid.NET /extensions/pape/1.0
},]
[WaWebHost.exe] Пропуск обнаружения HTML, поскольку XRDS содержал конечные точки службы.
[WaWebHost.exe] Выполнение обнаружения по предоставленному пользователем идентификатору: https://www.google.com/accounts/o8/id
[WaWebHost.exe] Создание запроса аутентификации для предоставленного пользователем идентификатора: https://www.google.com / account / o8 / id [WaWebHost.exe] Подготовка к отправке сообщения CheckIdRequest (2.0).
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement, примененный к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.RelyingPartySecurityOptions не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.BackwardCompatibilityBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.Messaging.Bindings.StandardExpirationBindingElement не применяется к сообщению.
[WaWebHost.exe] Элемент привязки DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement не применяется к сообщению.
[WaWebHost.exe] Отправка сообщения: CheckIdRequest
[WaWebHost.exe] Перенаправление на https://www.google.com/accounts/o8/ud?openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity= HTTP%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.return_to= HTTP%3A%2F%2F127.0.0.1%3A5100%2FOpenId.aspx%3Fdnoa.userSuppliedIdentifier%3Dhttps%253A%252F%252Fwww.google.com%252Faccounts%252Fo8%252Fid&openid.realm= HTTP%3A%2F%2F127.0.0.1%3A5100%2FOpenId.aspx&openid.mode=checkid_setup&openid.ns= HTTP% 3A% 2F% 2Fspecs.openid.net% 2Fauth% 2F2.0

1 ответ

Похоже, вы ловите исключения, а не выбрасываете их, что в случае ThreadAbortException может измениться, как это должно работать. Я не знаю, является ли это частью проблемы, но это всего лишь мысль.

Кроме того, я заметил, что вы используете URL-адрес запроса (независимо от того, что это) как return_to и как область. Я рекомендую не допускать, чтобы область была тем, чем является URL-адрес запроса, поскольку Google использует направленную идентификацию, и если один пользователь посещает "login.aspx", а затем тот же пользователь посещает "Login.aspx" (только заглавные буквы), Google будет видеть его как два разные сайты и отправить вам две разные личности. Вы должны убедиться, что "область" всегда одинакова для вашего сайта, заглавных букв и всего.

Что касается периодической проблемы с перенаправлением, я не вижу ничего, что могло бы вызвать это. Журнал предполагает, что перенаправление происходит. Хотя опять же ваша ловушка исключения может быть причиной сбоев здесь. Что вы получаете, когда перенаправление не происходит?

Другие вопросы по тегам