7

MVC 4 アプリケーションで DotNetOpenAuth を使用しています。突然 Google 認証が失敗します (MS は動作しています)。ストックコードはこれを行います:

[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
    var result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
    if (!result.IsSuccessful)
    {
        return RedirectToAction("ExternalLoginFailure");
    }

それが間違っていることはわかってresult.IsSuccessfulいますが、どうすればその理由を知ることができますか? result.Error無効です。

log4netを使用するためにこのページも見ました。ローカルの dev ボックスではログを取得しますが、リモート サーバーに展開するときはログを取得しません。

log4net webconfig:

<log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="RelyingParty.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date (GMT%date{%z}) [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="INFO" />
      <appender-ref ref="RollingFileAppender" />
    </root>
    <!-- Specify the level for some specific categories -->
    <logger name="DotNetOpenAuth">
      <level value="ALL" />
    </logger>
  </log4net>

編集私もlog4netをsql dbに試しましたが、それでも何もログに記録されませんでした

4

1 に答える 1

3

私はついにこれを理解しました。私が得ていた実際のエラーメッセージ:

Protocol error: This message has a timestamp of 10/23/2012 12:19:33 PM, 
which is beyond the allowable clock skew for in the future. 

サーバーがクラッシュした後、タイムゾーンが正しく設定されていないことが判明しました。これにより、検証/トークンが Google 側で失敗しました。

は100 に設定されてAdoNetAppenderいたため、「機能していません」でした。1 に設定すると、ログの取得が開始されました。bufferSizeこれが私が使用しているadonetappenderです

  <log4net>
        <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionStringName value="CONNECTIONSTRINGNAME" />
      <commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@exception" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.ExceptionLayout" />
      </parameter>
    </appender>
    <root>
      <level value="Debug" />
      <appender-ref ref="AdoNetAppender" />
    </root>
    <logger name="DotNetOpenAuth">
      <level value="ALL" />
    </logger>
  </log4net>

bufferSize問題が解決したら、back を 100 に設定する必要があります。

于 2012-10-23T20:02:44.370 に答える