1

PasswordRecovery.NET 4 Web フォーム アプリのコントロールに問題があります。ASP.NET メンバーシップ プロバイダーとフォーム認証を使用しています。Windows 2008R2 サーバーで IIS7 を実行しています。

アプリが会社のネットワーク内の Win2K8 サーバーで実行されている場合はすべて正常に動作しますが、アプリが Rackspace またはクライアントの Win2K8 ボックスに展開されている場合、私のResetPassword.aspxページは302 "Object Moved"Login.aspx応答を受け取り、その後、私のページにリダイレクトされます。パスワードの再設定メールを送信しないでください。

Fiddler のレポートは次のとおりです。

ここに画像の説明を入力

Fiddler からの応答ヘッダーの詳細は次のとおりです。

ここに画像の説明を入力

標準の Account ディレクトリにすべてのログイン ページとパスワード ページがあり、独自のものがありweb.configます。

ここに画像の説明を入力

web.configAccount ディレクトリの は次のとおりです。

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

アプリのセクションは次のとおりweb.configです (必要に応じて短くしています)。

<authentication mode="Forms">
   <forms name=".ASPXAUTH" loginUrl="~/Account/Login.aspx" 
                           defaultUrl="~/" 
                           protection="All" 
                           cookieless="UseDeviceProfile" 
                           enableCrossAppRedirects="false" />
</authentication>
<membership defaultProvider="MyCustomMembershipProvider">
   <providers>
      <clear />
      <add connectionStringName="MyString" 
           enablePasswordRetrieval="false"           
           enablePasswordReset="true" 
           requiresQuestionAndAnswer="false"
           applicationName="/" 
           name="MyCustomMembershipProvider" 
           type="MyCustomMembershipProviderType" />
   </providers>
</membership>
<authorization>
   <deny users="?" />
</authorization>

Rackspace ボックスで telnet を使用してメール サーバーとポートに ping を実行できるので、これが SMTP の問題だとは思いませんが、ResetPassword ページを実行すると、まだ 302 が返されます。また、会社のネットワーク内のサーバーではすべて正常に動作します。

また、Account ディレクトリには、Rackspace サーバーに対する完全な権限があります。

この SO answerを確認しました。これは、302 を取得しているページへの匿名アクセスを許可するように修正するソリューションを提供しますweb.configが、私の Accounts フォルダーはそこにあるすべてのページへのすべてのアクセスを許可します。その答えのもう1つの解決策は、 MVCルーティングを使用し<modules runAllManagedModulesForAllRequests="true">web.configいないため、ここで適用できるかどうかわかりません。(ただし、これについて修正していただければ幸いです!)

Rackspace サーバーに調査が必要なファイル権限またはユーザー権限がありますweb.configか?

私はこれについて非常に近いクライアントの締め切りに直面しているので、本当に助けが必要です. ありがとう!

アップデート。リクエストにより投稿されたその他のコード:

PasswordRecovery コントロール マークアップは次のとおりです。

<asp:PasswordRecovery ID="PasswordReset" 
                      runat="server" 
                      EnableViewState="false" 
                      ClientIDMode="Static" 
                      RenderOuterTable="false"
                      onverifyinguser="OnVerifyingUser" 
                      onsendingmail="OnSendingMail">
        <UserNameTemplate>
            <!-Here is there is just two Label and Input pairs. 
               One pair for user email, one pair for their db instance -->  
        </UserNameTemplate>
</asp:PasswordRecovery>

OnSendingMail 関数は次のとおりです。

protected void OnSendingMail(object sender, MailMessageEventArgs e)
{            
     e.Message.Subject = "MySubject";
     e.Message.IsBodyHtml = true;
     e.Message.Body = "ItsHtmlInRealLife";
}
4

2 に答える 2

0

これがあなたの質問で気づいたことです。web.config は次のようになります -

基本的に、Login.aspx、ResetPassword.aspx、および Register.aspx の 3 つのページを除く ~/Account フォルダー内のすべてのページへの匿名アクセスを制限します。

アカウント web.config

<?xml version="1.0"?>
<configuration>

  <location path="Login.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

  <location path="ResetPassword.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

  <location path="Register.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

</configuration>

ルート web.config

認証タグを削除します。基本的に、サイト内のすべてのページでログインが必要だと言っています。

それは適切な方法ではありません。匿名アクセスするには、少なくともホームページと Login.aspx が必要です。

<authorization>
   <deny users="?" />
</authorization>
于 2013-09-16T13:59:15.607 に答える