DotNetOpenAuth выдает «Исключение ProtocolException

#dotnetopenauth

#dotnetopenauth

Вопрос:

Я пытаюсь реализовать вход в OpeinID с ASP.NET MVC. Я пытаюсь следовать инструкциям, приведенным в http://blog.nerdbank.net/2008/04/add-openid-login-support-to-your-aspnet.html

Ниже приведены мои настройки web.config

 <dotNetOpenAuth>
<messaging>
    <untrustedWebRequest>
        <whitelistHosts>
            <add name="localhost" />
        </whitelistHosts>
    </untrustedWebRequest>
</messaging>
<reporting enabled="false" />
  

 <system.net>
<defaultProxy useDefaultCredentials="true">
    <proxy autoDetect="True" usesystemdefault="True"/>
</defaultProxy>
  

Я получаю «ProtocolException», в котором говорится «Конечная точка OpenID не найдена», когда я пытаюсь создать запрос.

 try 
{
    //ProtocolException is thrown
    IAuthenticationRequest request = openID.CreateRequest(openid_identifier); 
    request.RedirectToProvider();
}
catch (ProtocolException )
{
    throw;
}
  

Файл журнала, созданный Dotnetopenauth. (Я заменил свой действительный идентификатор пользователя на <myopenid> )

     {INFO}06/07 17:24:45 - Performing discovery on user-supplied identifier: http://<myopenid>.myopenid.com/
{DEBUG}06/07 17:24:45 - Filtering and sorting of endpoints did not affect the list.
{INFO}06/07 17:30:03 - DotNetOpenAuth, Version=3.4.7.11121, Culture=neutral, PublicKeyToken=2780ccd10d57b246 (official)
{INFO}06/07 17:30:03 - Scanning incoming request for messages: http://localhost/OpenID/User/Authenticate
{DEBUG}06/07 17:30:03 - Incoming HTTP request: POST http://localhost/OpenID/User/Authenticate
{DEBUG}06/07 17:30:31 - .NET Uri class path compression overridden.
{DEBUG}06/07 17:30:31 - HTTP GET http://<myopenid>.myopenid.com/
{ERROR}06/07 17:30:55 - WebException ConnectFailure from http://<myopenid>.myopenid.com/, no response available.
{ERROR}06/07 17:30:55 - Error while performing discovery on: "http://<myopenid>.myopenid.com/": DotNetOpenAuth.Messaging.ProtocolException: Error occurred while sending a direct message or getting the response. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 50.16.193.31:80
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socketamp; socket, IPAddressamp; address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exceptionamp; exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options)
   --- End of inner exception stack trace ---
   at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options)
   at DotNetOpenAuth.Messaging.UntrustedWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options)
   at DotNetOpenAuth.Yadis.Yadis.Request(IDirectWebRequestHandler requestHandler, Uri uri, Boolean requireSsl, String[] acceptTypes)
   at DotNetOpenAuth.Yadis.Yadis.Discover(IDirectWebRequestHandler requestHandler, UriIdentifier uri, Boolean requireSsl)
   at DotNetOpenAuth.OpenId.UriDiscoveryService.Discover(Identifier identifier, IDirectWebRequestHandler requestHandler, Booleanamp; abortDiscoveryChain)
   at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.Discover(Identifier identifier)
   at DotNetOpenAuth.OpenId.RelyingParty.AuthenticationRequest.Create(Identifier userSuppliedIdentifier, OpenIdRelyingParty relyingParty, Realm realm, Uri returnToUrl, Boolean createNewAssociationsAsNeeded)
  

Затем я проверил с помощью fiddler и не вижу, чтобы генерировался запрос на получение URI. Похоже, что dotnetopenauth не может сгенерировать запрос и там происходит сбой.

Кто-нибудь, пожалуйста, может мне здесь помочь? Что-нибудь, чего мне не хватает?

Я работаю из-за прокси.

Ответ №1:

Все, что я могу предложить, это написать тривиальное консольное приложение на C #, которое использует HttpWebRequest для загрузки страницы с вашего OpenID URL, который вы вводите в DotNetOpenAuth, чтобы вы могли сами увидеть сбой и диагностировать, что не так с настройками вашего брандмауэра / прокси.

Комментарии:

1. Определенно хорошая вещь… К сожалению, выявилась другая проблема 🙂

Ответ №2:

У меня была та же проблема, что и у вас, и это сработало, если я удалил автоматическое определение прокси. Следовательно, в web.config system.net раздел, только:

Эта конфигурация позволила мне работать из-за корпоративного прокси-сервера, а также с использованием Fiddler.