0

私はWebAPIベースのSaaSアプリケーションを作成しています。このWebAPIは、ユーザーインターフェイスを必要とせずに単独で使用でき、WebAPIに対して行われたすべての要求に対して基本認証が送信され、メソッドが呼び出されて認証されるといくつかのオブジェクトが返されます。MVC WebAppからWebAPIバックエンドを使用するためのベストプラクティス

私は大きな問題に直面しています:私はMVCでウェブアプリケーションを作成していますが(しかし、どの言語でも構いません)、ユーザー名とパスワードを保持しなくてもWebAPIエンドポイントを呼び出す方法を理解できませんメソッドを呼び出すたびにWebAPIリクエストを認証するためです。

この場合のベストプラクティスは何ですか? 私は...任意の適切な解決策を見つけるために

これまでのところ、私はクッキーのuserDataに格納HttpContext.Response.Cookies.Add方法、のカスタム実装の助けを借りて、独自のクッキーを作成しようとしましたが見えることはできません暗号化されたユーザー名とパスワードのペア。このようにして、WebAPIメソッドを呼び出すことで、正しいユーザ名とパスワードを持つBasicAuthenticationCredentialsを指定することができますが、これは私にとって長期的には非常に維持できない方法です。

また、OAuth2の方法を試したかったのですが、SQL Serverのカスタムユーザーテーブル(およびGoogle結果リストの最初の5ページ)に基づいて認証サーバーを実装する方法については、よく書かれたガイドが見つかりません私を助けなかった、彼らは実際に私をこのトピック、OWINとKatanaの全体のことについてもっと混乱させました...)。

誰かが私を助けようとしている場合に備えて、私はさらに詳しい情報を提供することができます。

ありがとうございます。 ステファノ。

+0

このリンクは、適切な情報源を見つけるのに役立ちます:https://docs.microsoft。com/en-us/aspnet/identity/overview/getting-started/aspnet-identity-recommended-resources –

+0

ありがとう@RuardvanElburg、これを必ずチェックしてください! – frikyfriky11

答えて

0

ここでは、独自のOAuth2サーバーを実装する方法についての良いチュートリアルです:

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

のOAuthを使用しての背後にある主要なアイデアは、あなただけの最初の要求のためのユーザ名とパスワードが必要になりますということです、と後APIにアクセスするためのアクセストークンを取得します。このアクセストークンは有効期間があり、有効期限が切れた後は、新しいアクセストークンを要求する必要があります(ユーザー資格情報を再度送信するか、資格の代用として使用する更新トークンを使用して)。

アクセストークンの存続期間があるため、トークンの1つが侵害されても、トークンを取り消すことができます(または期限が切れるまで待つことができます。たとえば、トークンを作成できます)。 5分またはそれ以下に更新することができます。それはあなた次第です)、クライアントは自動的に新しいものを要求し、それがストーリーの終わりになります。一方、常にユーザー資格情報を受け取り、その資格情報が侵害された場合、ユーザーはそれらを変更する必要があり、ユーザーが最終的に資格情報を変更するまでリスクがそこにあります(ここでは、ユーザーがOAuthのアプローチはこれらのトークンを常にリフレッシュするだけですが、この問題を認識しておく必要があります)。

また、トークンは機密情報であり、盗聴者がアクセストークンを取得しないようにするか、さらに悪いことに、通信を傍受するだけでリフレッシュトークンを使用しないようにしてください。彼がこのようなことをすることができれば、1分ごとに爽やかなトークンでさえ、あなたが送るすべてのトークンを得る誰かに対して役に立たないアプローチになります。

+0

お返事ありがとうございます。私はあなたが提供したリンクからできるだけ多くのことを学びたいと思っています。ちょうど別の質問:サーバーから受け取ったトークンをクッキーの 'userData'に格納するのはよい習慣でしょうか? WebAPIのOAuthサーバーを介して認証した後のMVCフロントエンドからの呼び出しはどうなりますか?毎回リクエストにトークンを渡す必要がありますか?再度、感謝します。 – frikyfriky11

+0

まあ、それは依存しています。あなたがAPIを使用する唯一のWebアプリケーションを作成する予定で、それを使用したいと思う人(つまりEbayのAPI)にとってはAPIではありません。その場合、そのトークンを暗号化された値としてデータベースに格納するほうがずっと良いと思います。結局のところ、トークンは一時的なユーザー名とパスワードと同じになるので、機密情報として扱う必要があります。リクエストについては、すべてのリクエストでアクセストークンを送信する必要があるため、サーバーがあなたを識別できるようにします。 –

+0

Uhm、多分私は自分自身を悪い方法で説明したかもしれません...私はフロントエンドに受け取ったトークンを保存するのがよい習慣であるかどうか尋ねるつもりでした。このシナリオを想像してください:フロントエンドのアプリはWebAPIにWebAPIはトークンを送信して、次の要求で認証するためのトークンを送信します。フロントエンドからリクエストを行う場合は、リクエストのヘッダーに以前に送信したトークンを追加する必要があります。有効期限が切れるまで、このトークンをクライアントのデバイスに保存して、さらなる認証を行うことができます。しかし、そのためのベストプラクティスは何ですか?テキストの壁には申し訳ありません:D – frikyfriky11

関連する問題