免責事項:私はMVC4 + Web API + Webサービスの一般的な+ JQueryを初めて使用していると言います。私は間違った角度でこれを攻撃しているかもしれません。ASP.NET Web APIを使用した基本認証とフォーム認証
私は、Web MVC App + Web APIを.NET用のC#でAzureにデプロイしようとしています。ウェブAPIはモバイルクライアント(iOS、RestKitを使用)によって使用されます。
Web MVC Appは比較的シンプルです。フォーム認証をSimpleMembershipに使用したいと思います。
JQuery(Knockout)スクリプトのWeb APIメソッドを使用して、Webページの一部を埋めます。したがって、JQueryはフォーム認証で認証された同一のIDを使用することを期待しています。
しかし、Web Apiはモバイルクライアントから直接呼び出すことができます。フォーム認証なし。
私たちはThinktecture Identity Model(http://nuget.org/packages/Thinktecture.IdentityModelhttps://github.com/thinktecture/Thinktecture.IdentityModel.40)を見てきました。 BasicAuthハンドラとAcessKeyハンドラをconfigに追加して動作させます(下記のコードを参照)。
認証されずにwebapiにアクセスしようとすると、ブラウザは基本認証ダイアログを表示し、期待どおりに動作します。
「問題」は、フォーム認証を使用して既にログインしていて、Web APIメソッドを呼び出そうとすると、基本認証ダイアログが表示されます。言い換えれば、Thinktecture IdentityModelはフォーム認証を完全に無視するようです。
私の質問は以下のとおりです。
- は私の期待は正しいですか?一度フォーム認証を済ませたら、JQueryスクリプトなどが同じブラウザユーザーセッションからWeb APIにアクセスできるように何もしないでください。
- どうすれば修正できますか?
- 私の期待が正しくない場合。これはどうやって動くのだろう?つまり、JQueryスクリプトを認証するにはどうしたらいいですか?
Stackoverflowにも同様の質問がたくさんあることは知っていますが、私は正直言ってたくさん見たことがありますが、見たビデオなどは分かりませんが、技術。
私は助けていただきありがとうございます。ありがとう。
public static AuthenticationConfiguration CreateConfiguration()
{
var config = new AuthenticationConfiguration
{
DefaultAuthenticationScheme = "Basic",
EnableSessionToken = true,
SetNoRedirectMarker = true
};
config.AddBasicAuthentication((userName, password) => userName == password, retainPassword: false);
config.AddAccessKey(token =>
{
if (ObfuscatingComparer.IsEqual(token, "accesskey123"))
{
return Principal.Create("Custom",
new Claim("customerid", "123"),
new Claim("email", "[email protected]"));
}
return null;
}, AuthenticationOptions.ForQueryString("key"));
こんにちは、これは良いです。しかし、 "IMembershipService"インターフェースはどこから来ていますか? (これはWebAPIDoongleまたは標準の.NET4 MVCの一部ではないようです)。クラスが機能することに注意してください。同じクラスでAPIキーを処理してもらいたいと思いますが、その機能を追加できると思います。私の主な問題は、「WebSecurity」クラスを使用してデータベースに対してユーザーを検証し、プリンシパルを返す方法です(私はWebSecurity.Loginを実行できますが、それはちょっと面倒です)。 – rufo
BTW:ブラウザ(Chrome)からテストするときに、ユーザーがログに記録されていない場合、ブラウザが基本認証を提供することはありません。それは私のモバイルクライアントにとっては必要ではありませんが、テストするのに便利です。私もそれをチェックします。 – rufo
@rufo IMembershipServiceは私自身の実装です。私はアイデアを得るためにそこに置いた。それをあなた自身のimplで置き換えることができます。 – tugberk