9

既存の動作中の ASP.NET MVC 4 Web アプリケーションがあります。私は独自RoleProviderに作成し、標準の[Authorize] 属性を使用しています。私のコントローラーは次のようになります。

[Authorize(Roles="ContactAdmins")] //System.Web.Mvc
public ActionResult Index()

アプリケーションに WebAPI コントローラーを追加し、既存の配管を活用したいと考えています。

[Authorize(Roles="ContactAdmins")] //System.Web.Http
public IEnumerable<Contact> Get()

これは、私のサイト内からの Javascript ajax 呼び出しで機能します (ブラウザー ユーザーは既にフォーム認証 Cookie で認証されているため)。私の質問は、C# コンソール アプリケーション (または Web アプリの一部ではない他のアプリケーション) からのもので、この API に対して認証するにはどうすればよいですか?

公開されている API の部分について、この質問Consuming WebApi in MVC3にあるものと非常によく似たコードを使用していると仮定します。

var url = "http://localhost:9000/api/contacts";
using (var client = new WebClient())
using (var reader = XmlReader.Create(client.OpenRead(url)))
{
    var serializer = new XmlSerializer(typeof(Contact[]));
    var contacts = (Contact[])serializer.Deserialize(reader);
    // TODO: Do something with the contacts
}

ここで何を変更する必要がありますか? それとも、これを破棄して、まったく別のアプローチを使用する必要がありますか? リモートクライアントのAPI認証にフォームを使用することに縛られていませんが、アプリの一部であるJavaScriptクライアントに対して現在のエレガントなアプローチを維持したいと思います(フォームCookieが設定されているため、APIをリクエストするだけです)。

4

2 に答える 2

1

Cookie をコンソール アプリケーションと共有する方法は多数あります。ここでいくつかのアイデアを見てみましょう:

http://netpl.blogspot.com/2008/02/clickonce-webservice-and-shared-forms.html

もう 1 つの簡単なオプションは、認証を必要とせず、ユーザー名とパスワードを取得し、Cookie をクライアントに返す Web メソッドを公開することです。

どのようなアプローチを取るにしても、目的はコンソール アプリケーション側で何らかの方法でフォーム Cookie を取得することです。そこからは、リクエストに Cookie を添付するだけなので、簡単に完了できます。Web API は問題なく Cookie を受け入れます。

于 2013-02-07T21:28:50.867 に答える