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 будет видеть его как два разные сайты и отправить вам две разные личности. Вы должны убедиться, что "область" всегда одинакова для вашего сайта, заглавных букв и всего.
Что касается периодической проблемы с перенаправлением, я не вижу ничего, что могло бы вызвать это. Журнал предполагает, что перенаправление происходит. Хотя опять же ваша ловушка исключения может быть причиной сбоев здесь. Что вы получаете, когда перенаправление не происходит?