0

ここに私のセットアップがあります:MVCサイトから自分のAPIにアクセスするにはどうすればよいですか?

wwwサブドメイン(例:www.example.com)でホストされているMVC3サイトがあります。私のサイトは、ASP.NETメンバーシップ/ロールプロバイダに裏付けられたSSLとフォーム認証で保護されています。/servicesの下にサービス機能を提供するHTTPハンドラーがあります(例:www.example.com/services)。これらは、SSLによる基本認証によって保護されます。私はこれらのサービスにモバイルデバイスが正常にアクセス/消費している。また、私の公開用APIとなるapiサブドメイン(api.example.comなど)を持つ新しいサイトを作成しました。これらのサービスは現在、WCF Web APIプレビュー6(最終的にはASP.NET Web APIに移行される)を介して公開されています。これらのサービスは、SSLによる基本認証によっても保護されています。 ASP.NETメンバーシップの実装では、ハッシュされたパスワード(つまり、暗号化されていない)が保存されます。すべてのサービスはJSON応答を処理します。これらのものはすべて素晴らしい作品です。ここで

は私のジレンマです:

私はMVCサイトで新しいビューを書き始め、アヤックスを使用するために素晴らしいことだ実現しました。私の具体的なケースは、カスケードドロップダウンリストを実装することです。私はこれをjQueryとapiサブドメインの下に新しいサービスを使って実装したかったのです。私はこれが簡単な行為であろうと思っていました。そして私は自分自身のAPIを呼び出す有効な方法がないことに気づきました。私のクライアント(モバイルデバイス)はすべてローカルにユーザー名とパスワードを保存するので、これは簡単です。しかし、同じユーザーが自分のサイトにログインしている場合、私は自分のユーザー名を持っていますがパスワードは持っていないので、apiサブドメインで提供されているサービスに直接アクセスすることはできません。

私はそれを見るように、私は3つの解決策があります。私自身のパブリックAPIを消費eschewing、直接/サービスURIの下MVCサイトをサポートするサービスを実装

  1. を。
  2. apiサブドメインのサービスにアクセスするためにサイトが使用するメンバーシップストア(ユーザー名とパスワードを知っている)にスーパーユーザーを作成します。
  3. 私の認証戦略を変更してください。

自分自身の公開APIを利用すべきではないと考えています。自分のプライベートサービスを使用したほうが良いでしょう(ロジックはすべてファサードレイヤーで共有されているので問題ありません)。

ここで推奨される戦略は何ですか?また、オプション2または3を使用する場合は、JSONPを使用しなければならないと思います。これは正しいです?

アドバイスをいただければ幸いです。詳細が必要な場合は投稿してください。回答を更新します。

ありがとうございます!

+0

tl; drだが、私はあなたが 'blah/api'からあなたのapiをホストし、' api.blah'からそれらにURLを書き換える必要があると思っています。これは、あなたがjavascriptでドメイン間の問題を渡すことを許可する必要があります。 –

+0

APIは、サイトの残りの部分と同じ認証戦略を使用する必要があります。認証トークンはクッキーとして書かれており、AJAX経由で送信する必要があります(サブドメインをサポートするように書かれているか、APIを仮想ディレクトリとしてホストしていることを前提としています)。 – Brian

答えて

0

簡単にするために、自分のパブリックAPIを消費することが最大の関心事ではないと判断したため、既存のMVCサイトの新しいコントローラでJsonResultアクションを実装しました。これにより、私は既存のフォーム認証を利用し、クロスドメインのajaxリクエストを避けることができました。

0

これを正しく実行するには、フォーム認証のCookieがサブドメインなしで作成されていることを確認するだけです。つまり、.example.comとなります。別のサーバーを使用している場合は、マシンキーを共有します。

フォームの認証トークンはステートレスであり、サーバー側に何も保持されないので、これは正常に動作します。

関連する問題