フォーム認証で Web API コントローラー サービスへのアクセスを構成する方法を決定しようとしています。承認要素を追加して、すべての匿名ユーザーを拒否する承認構成を追加すると、次のようになります。
<authorization>
<!-- すべての匿名ユーザーを拒否 -->
<deny users="?" />
</認可>
期待どおり、ログイン ページのみにアクセスできます。しかし、コントローラーから返されたリストにもアクセスしたいと思います。[AllowAnonymous] 属性を、ドロップダウン メニューの入力に使用される値を返す単純なサービスに追加しました。例えば:
namespace WebAPI.Controllers
{
public class RegisterController : ApiController
{
[AllowAnonymous]
public List<ListElement> GetActivitiesList()
{
List<ListElement> li = new List<ListElement>();
li.Add(new ListElement() { Id = 1, Text = "Item 1" });
li.Add(new ListElement() { Id = 2, Text = "Item 2" });
li.Add(new ListElement() { Id = 3, Text = "Item 3" });
return li;
}
}
}
controllers ディレクトリを web.config の許可リストに追加しました。
<location path="Controllers">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
サンプル ページを参照してコントローラーを呼び出すと、[AllowAnonymous] 属性を追加しても、フォーム認証はログイン ページへの 302 リダイレクトでアクセスを拒否します。サイト全体の認証要素「<deny users="?" />」を削除すると、[Authorize] 属性と [AllowAnonymous] 属性を使用してアクセスを制御できます。
目的は、匿名ユーザーがいくつかのページ (登録など) で特定のサービスを使用できるようにすることですが、残りのサイト アクセスは認証済みユーザーに制限されます。サービスへのアクセスは、ファイルへのアクセスとまったく同じではないため、この状況に対応する特別なハンドラーを作成する必要があると思いますが、どうすればよいかわかりません。