ASP.NET SimpleMembershipを使用して、WebAPIを使用するユーザーを認証したいと思います。Thinktectureには、Thinktecture.IdentityModel(http://thinktecture.github.com/Thinktecture.IdentityModel.45/)と呼ばれるすばらしい認証ライブラリがあり、FormsAuthとBasicAuth(ソース)を結び付ける例があります。ただし、この例では、ASP.NETメンバーシッププロバイダーがないと機能しないMembership.ValidateUser()を使用しています。これは、SimpleMembership(ソース)ではサポートされていません(編集:これは完全には当てはまりません。以下のMarkの回答を参照してください)。
編集:
これが私がしたことです:
1)新しいMVCインターネットアプリケーションを作成します
2)NuGetを介してThinktecture.IdentityModelをインストールします
3)スキャフォールディングを介してモデルとAPIコントローラーを作成します。
public class Goober
{
public int GooberId { get; set; }
public string GooberWords { get; set; }
}
4)プロジェクトを実行し、新しいユーザーを作成し、Fiddlerを使用して新しいGooberを作成しました
5)GetGoober(int id)に[Authorize]を追加しました
6)WebApiConfig.csに追加:
var authConfig = new AuthenticationConfiguration();
authConfig.AddBasicAuthentication((userName, password) =>
Membership.ValidateUser(userName, password));
config.MessageHandlers.Add(new AuthenticationHandler(authConfig));
プロジェクトを実行し、Fiddlerでapi / goober / 1を押すと、401 www-Authenticate:unspecificedが表示されます。しかし、最初にAccountControllerを使用してログインし、次にFiddlerを使用すると、200が得られ、すべてが桃色になります。
編集
さて、問題は私の最初の質問とは関係がないと思います。テンプレートのSimpleMembershipの初期化に関連しているのではないかと思います。プロジェクトを開いてデバッグを実行し、FiddlerでAPIをヒットすると、Authを通過できません。しかし、Webフロントエンドの「登録」リンクをクリックするだけで、Authを通過します。これは、InitializeSimpleMembershipAttributeがAccountControllerで呼び出されるため、コントローラーが呼び出されるまで初期化されないためだと思いますか?
Membership.ValidateUser()の代わりにWebSecurity.Login()を使用しようとしましたが、機能しません。
これを実際に実装する方法に迷っています。誰かアドバイスはありますか?それとも、私はこの問題に間違った角度から取り組んでいるのでしょうか?