4

ソリューションに複数のアプリケーションがあり、それらの間で認証を共有したいと考えています。簡単にするために、2 つの WebAPI アプリケーションがあるとします。エンドポイントを使用して認証し/Token、Bearer トークンを受け取ります。その後、このトークンをAuthentication:ヘッダーに入れます。

これで、WebAPI_1 にログインして、装飾された[Authorize]メソッドからデータを取得できます。しかし、WebAPI_2 でそれを行いたい場合、それは機能しません。

These WebAPIs are out-of-the-box VS2013 WebAPI 2.1 template with ASP.NET Identity 2. それぞれ個別に設定されていますが、同じデータベースに接続されています。

この問題にどのように取り組むべきですか?

クライアント アプリケーション (AngularJS) が WebAPI と通信する LoadBalanced アーキテクチャを実現する予定です。これで、WebAPI を複製できるようになったので、ユーザーはこれらすべてに沿って認証する必要があります。

4

3 に答える 3

0

WebAPI_1、WebAPI_2 などがすべて同じデータベースに対して動作する場合、なぜそれらを異なる Web サーバーでホストしているのですか? WebAPI Web サーバーが 1 つしかない場合は、一貫した認証ミドルウェアを適用する方がはるかに簡単です。

負荷分散されたアーキテクチャを使用している場合は、この単一の WebAPI サーバーのインスタンスを追加して、要求の負荷要求を処理できるはずです。

それ以外の場合、WebAPI_1、WebAPI_2 を別々の Web サーバーとして存在させる必要がある場合は、おそらく別の Web サーバー WebAPI_Token で、すべての Web サーバーがトークンを取得できるように /Token エンドポイントを実装する必要があります。/Token エンドポイントは現在どこにありますか?

于 2014-04-14T18:08:51.203 に答える
0

-Attribute[Authorize]は、現在のプリンシパルが認証されているかどうかを確認するだけです。

WebAPI はどのように設定されていますか? 認証ミドルウェアが常に WebAPI ミドルウェアの前に実行されるようにしてください。これはおそらくあなたの問題です。

于 2014-04-12T12:46:34.477 に答える
0

authorize 属性について心配する必要はありません。ID があることを確認するだけです。

startup.cs で、ベアラー トークンを使用するように API を構成する必要があります。

トークンを生成するクライアントとすべての Web API サーバーは、すべて同じ AccesstokenFormat を使用する必要があります。ISecureDataFormat<AuthenticationTicket> そうしないと、渡されたトークンを読み取ることができません。トークンを復号化しても、必ずしも信頼できるとは限らないことに注意してください。トークンは署名され、検証されていることをお勧めしますが、これは Identity 2.0 の範囲外です。

webapi の Startup.cs

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
                      //you can write your encryption however you want.
                      // just implement ISecureDataFormat<AuthenticationTicket>
              AccessTokenFormat = new SecureTokenFormatter("YourKeyIfThatsHowYouDesignIt")
});

次に、魔法のように、コントローラーに認証済みユーザーが設定されます。

** 編集 ** スタック上のフォーマッタのいくつかの異なる例を見たので、Google で検索してください。

于 2014-05-05T20:50:09.060 に答える