11

VisualStudio2012のIdentityandAccess ...拡張機能を使用して、ASP.NET 4.5MVC4プロジェクトでWindowsIdentityFoundation(WIF)を正常に構成しました。ただし、匿名アクセスを許可するために特定のパスを承認から除外することはできません。 。

デフォルトルート(つまり/Home)にアクセスすると、パッシブリダイレクトにより、構成された発行者Uriにリダイレクトされます。これは正しいです。ただし、STS認証からパスを除外して、STS発行者にルーティングされることなく/Guestすべてのユーザーがアクセスできるようにするとします。http://ourhost/Guest静的ドキュメントのみがそこにあります。

からのスニペットWeb.config

<system.identityModel>
  <identityConfiguration>
    <audienceUris>
      <add value="http://ourhost/" />
    </audienceUris>
    <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <trustedIssuers>
        <add thumbprint="9B74****40D0" name="OurSTS" />
      </trustedIssuers>
    </issuerNameRegistry>
    <certificateValidation certificateValidationMode="None" />
  </identityConfiguration>
</system.identityModel>
<system.identityModel.services>
  <federationConfiguration>
    <cookieHandler requireSsl="false" />
    <wsFederation passiveRedirectEnabled="true" issuer="http://oursts/Issue" realm="http://ourhost/" reply="http://ourhost/" requireHttps="false" />
  </federationConfiguration>
</system.identityModel.services>

さらに私たちは...

<system.webServer>
  <!-- ... -->
  <modules runAllManagedModulesForAllRequests="true">
    <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
    <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
    <remove name="FormsAuthentication" />
  </modules>
</system.webServer>

そして最後に:

<system.web>
  <!-- ... -->
  <authentication mode="None" />
</system.web>

私たちは成功せずに次のことを試みました:

<location path="~/Guest"> <!-- also "/Guest" is not working -->
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

また、小さなWeb.configファイルをこのフォルダーに入れようとしましたが、成功しませんでした。ブラウザでどのUriを見つけても、常にリダイレクトされます。

これを達成するための適切な方法は何ですか?

編集

以前の「受け入れられた回答」を削除し、「受け入れられた回答」をEugenios回答に設定します。これは、より有用な回答です。

4

5 に答える 5

12

MVCアプリでは、通常[Authorize]、コントローラーとアクションの属性を介してアクセスを定義します。

web.configから削除するだけです。

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

注:これは通常、VS2010の「STS参照の追加」ウィザードによって自動的に追加されます。

動作はVS2012と新しいツールでまったく同じようです。まったく新しいMVC4アプリを作成しました。ローカル構成STSを使用して「IdentityandAccess...」ツールを実行しました(すべてデフォルトのままにします)。

このフラグメントをweb.configに追加しました。

<authorization>
  <deny users="?" />
</authorization>

それを削除して[Authorize]、Aboutcontrollerアクションに追加しました。

[Authorize]
public ActionResult About()
{
    ViewBag.Message = "Your app description page.";

    return View();
}

[バージョン情報]リンクをクリックすると、STSにリダイレクトされます。他のすべては匿名アクセスで機能します。

ノート:

ウィザードでもこれをある程度制御できます(ウィザードの「構成」ページを参照)。

于 2012-11-08T19:38:09.973 に答える
4

私は[Authorize]仕事に取り掛かることができません-それは私のSTSへのリダイレクトを行っていません、そしてそれは私が欠けているものであると確信しています。しかし、私は元の質問を解決する方法を発見しました。

global.asax

    protected void Application_Start()
    {
        ... config stuff ...
        FederatedAuthentication.WSFederationAuthenticationModule.AuthorizationFailed += WSFederationAuthenticationModule_AuthorizationFailed;
    }

その後:

    void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e)
    {
        // Do path/file detection here
        if (Request.Path.Contains("/Content/") || Request.Path.Contains("/Scripts/"))
        {
            e.RedirectToIdentityProvider = false;
        }
    }
于 2014-09-21T11:33:22.293 に答える
2

私はトーマスと同じ状況にありました。私の場合、IISExpressをローカルでテスト/使用していました。

Eugenioの答えは、1つの追加要件を付けて、ほとんど私を働かせました。MVCプロジェクトプロパティの「匿名認証」を「有効」に設定する必要がありました。

これはデフォルトで無効になっているか、VS2012の「IDとアクセス...」ツールを使用するときにそのように設定されている可能性があります。

したがって、要約すると、書き込み/保守するコードや特別な属性はありませんでした。

私のcsprojファイルには次のものが含まれています。

<IISExpressAnonymousAuthentication>enabled</IISExpressAnonymousAuthentication>

私のweb.configには次のものが含まれています。

<system.web>
    <authentication mode="None" />
</system.web>

<system.web>
    <authorization>
        <allow users="*" />
    </authorization>
</system.web>

<system.webServer>
    <modules>
        <remove name="FormsAuthentication" />
        <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
        <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
    </modules>
</system.webServer>

<system.identityModel.services>
    <federationConfiguration>
        <wsFederation passiveRedirectEnabled="true" issuer="https://REMOVED.accesscontrol.windows.net/v2/wsfederation" realm="urn:REMOVED" requireHttps="false" />
    </federationConfiguration>
</system.identityModel.services>

そして、WIFによって防御したいコントローラーアクションに標準の[Authorize]属性を追加します。

[Authorize]
public ActionResult About()
{
....
}
于 2013-03-06T15:01:19.943 に答える
2

最終的に私を正しい方向に導いたのは、ページの特定のコントローラーまたは領域を保護する方法を説明する古いブログ投稿でした。グローバルフィルターと組み合わせて、私はほとんどそこにいます。

passiveRedirectEnabled="true"このオプションを使用するのではなく、に設定することが重要なようfalseです。そうして初めて、認証プロセスを完全に制御できますが、SignInRequestMessageクラスを使用して、パッシブリダイレクトを自分でトリガーする必要があります(これは大したことではありません)。

必要なコードが少ない、より優れたソリューションを歓迎します。

編集

このための「受け入れられた回答」状態を削除し、「受け入れられた回答」をEugenios anwerに設定します。これは、より有用な応答であるためです。

于 2012-11-09T08:24:06.550 に答える
0

私はこれをweb.configで解決しました。最初の行はすべての許可されていないユーザーを許可し、2番目の行はリダイレクトを無効にしました

 <wsFederation passiveRedirectEnabled="false" issuer="xxx" realm="xxx"/>

<authentication mode="Windows" />
  <authorization>
      <allow users="*" />
  </authorization>
于 2022-01-25T17:51:56.517 に答える