免責事項: 私は MVC4 + Web Api + Web サービス全般 + JQuery を初めて使用することから始めましょう。間違った角度でこれを攻撃している可能性があります。
.NET 4 を Azure にデプロイするために、C# で Web MVC アプリ + Web API を構築しようとしています。Web API は、モバイル クライアント (iOS、RestKit を使用) によって使用されます。
Web MVC アプリは比較的単純です。フォーム認証と SimpleMembership を使用したいと考えています。これは達成され、正常に動作します。
JQuery (Knockout) スクリプトの Web API メソッドを使用して、Web ページの一部を埋めます。したがって、JQuery はフォーム認証によって認証された同じ ID を使用することが期待されます。
ただし、Web Api はモバイル クライアントから直接呼び出すことができるという考え方です。それらのフォーム認証はありません。
Thinktecture アイデンティティ モデル ( http://nuget.org/packages/Thinktecture.IdentityModel https://github.com/thinktecture/Thinktecture.IdentityModel.40 ) を検討してきました。BasicAuth および AcessKey ハンドラーを構成に追加したところ、機能しました (以下のコードを参照)。
認証されずに 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", "foo@customer.com"));
}
return null;
}, AuthenticationOptions.ForQueryString("key"));