8

私は会社の内部 Web ベースのツールに取り組んでいます。このツールの一部は、別のアプリケーション (Cruise Control ダッシュボード) であり、ルート アプリケーションの下の独自の仮想ディレクトリで実行されます。

フォーム認証を設定し、ルート アプリケーションにログイン フォームを設定することで、この内部アプリケーションへのアクセスを制限したいと考えていました。

以下をルート アプリケーションの web.config に入れました。

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

ただし、フォーム認証が機能していないようです。そのアプリケーションに直接アクセスしても、ログイン ページにリダイレクトされません。

<allow> タグと <deny> タグの設定が間違っているような気がします。誰かが明確にすることができますか?

4

8 に答える 8

8

また、path ="/"をに入れる必要があるかもしれません

それでした!

だから、要約、これを行うために;

ルートweb.configに次を追加します。

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

デフォルトでは「AutoGenerate、IsolateApps」であるため、これを行う必要があります。

次に、フォームAuth cookieに両方で同じ名前を付ける必要があります。これはすべて、ルートでロケーションタグを使用して行いました。

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

ついに:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

皆さんの助けに感謝します。これはスタンパーでした。

于 2008-08-21T04:01:22.467 に答える
2

FormsAuthenticationは、ユーザーに提供するトークンを暗号化し、デフォルトでは、アプリケーションごとに異なるキーを暗号化します。Forms Authをアプリケーション間で機能させるには、次の2つのことを行う必要があります。

まず、FormsAuthの「名前」をすべてのアプリケーションで同じに設定します。これは次の方法で行われます。

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

「名前」を両方のアプリケーションweb.configsで同じになるように設定します。

次に、暗号化するときに同じキーを使用するように両方のアプリケーションに指示する必要があります。これは少し紛らわしいです。これを設定するとき、私がしなければならなかったのは、両方のweb.configsに以下を追加することだけでした。

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

ドキュメントによると、これはデフォルト値ですが、指定しない限り機能しませんでした。

于 2008-08-21T03:28:52.247 に答える
1

<formsタグにpath="/"を入れる必要があるかもしれません。申し訳ありませんが、私がこれを行ってからしばらく経ちました

于 2008-08-21T03:53:15.293 に答える
0

そのコードはジョナサンのどこにありますか?私の経験では、ログインコントロールがあり、OnAuthenticateイベントではAuthenticatedをfalseに設定します...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

しかし、それはMicrosoftWayを使用しています

于 2008-08-21T03:31:17.983 に答える
0

すべての認証されていないものを許可しています。あなたはこのようなものを探しているかもしれません

<deny users="?"/>
于 2008-08-21T02:36:47.647 に答える
0

それは機能しません。それでも、すべてのユーザー (認証されているかどうかに関係なく) がアクセスできます。

allow タグは冗長なので省略することもできると思います。ただ:

<deny users="?"/>
于 2008-08-21T02:56:51.293 に答える
0

このクルーズ コントロール アプリケーションのファイル拡張子は何ですか? ASP.NET が処理するように登録されているファイル タイプ (jsp、java など) でない場合、ASP.NET は認証メカニズムとして機能しません (IIS 5 および 6)。たとえば、静的な html ファイルの場合、ワイルドカード マッピングが実装されていない限り、IIS はすべての認証と承認を行い、ASP.NET isapi 拡張機能を使用せずにファイルを提供します。IIS7 は、新しい統合パイプライン モードを使用して、すべての要求をインターセプトできます。IIS6 については、この問題に関する Scott Gu の記事を参照してください

于 2008-11-28T16:07:53.393 に答える