1

私はロールによって承認されたASP.NETコアにカスタムWeb APIを構築しました。他のCore WebアプリケーションでこのAPIを使用する正しい方法は何でしょうか? APIを使用するアプリケーションの認可についてはどうすればよいですか?他のCore Webアプリケーションでカスタム構築された、認可されたASP.NET Core Web APIを使用する方法は?

編集:私は何をしようとしている上、もう少し詳しく:

それでは、私は認可ポリシーを持っているとしましょう。別のWeb APIアプリケーションでは、そのポリシーをStartupで宣言し、いくつかのAPIメソッドを承認します。それは動作し、今すぐ "webapi.foo.com"で、素晴らしいホストされています。さて、別の新しいWebアプリケーションを作成し、そのAPIからいくつかのメソッドを使いたいとしましょう。だから私は私の質問は2倍だと思う: "webapi.foo.com"でそれらのメソッドを呼び出すにはどうすればいいですか?どうすれば私のアプリに許可されたメソッドを呼び出す権限があることを確認できますか?

+0

呼び出し "はどのようにAPIを使用するアプリケーションを許可については行くべき?"広い質問です。可能な答えが多すぎるか、この形式には長すぎると良い回答があります。回答セットを絞り込むか、いくつかの段落で回答できる問題を特定するための詳細を追加してください。 –

+0

私はこれで誰かに返答しました。うまくいけば、これはそれを少し狭めます:あなたのポリシー認証の例を使用しましょう。別のWeb APIアプリケーションでは、そのポリシーをStartupで宣言し、いくつかのAPIメソッドを承認します。それは動作し、今すぐ "webapi.foo.com"で、素晴らしいホストされています。さて、別の新しいWebアプリケーションを作成し、そのAPIからいくつかのメソッドを使いたいとしましょう。だから私は私の質問は2倍だと思う: "webapi.foo.com"でそれらのメソッドを呼び出すにはどうすればいいですか?どうすれば私のアプリに許可されたメソッドを呼び出す権限があることを確認できますか? – Daath

+2

承認されたフレームワークで相互に通信する必要のある多くのWebアプリケーションの開発が見込まれる場合は、他のWebアプリケーション、つまりIDプロバイダの認証管理だけを行うWebアプリケーションを開発することで利益を得ることができます。認証トークンまたはHMAC、または同じ機能を提供する他のメカニズムを実装することができます。 – boosts

答えて

2

認可 も参照します.foo.com)は、バックエンドAPI(api.foo.com)でログインメソッドを呼び出します。 api.foo.comのloginメソッドは、ユーザーを認証し、その応答にJWTを発行します。 webapp.foo.comはこのJWTを使用してコントローラのアクションを認証します(トークンのクレームを使用する認可ポリシーを定義します)。トークンをfoo.api.comに渡すたびに、トークンを渡します。 webapp.foo.comとapi.foo.comの両方は、JWTのクレームセットに基づいて認可ポリシーを作成するだけで、トークンの使用を共有することができます。

api.foo.com

  string jwt = xxx.yyy.zzz; //use the actual JWT returned from your login call 
     var client = new HttpClient("http://api.foo.com"); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwt); //add the JWT to the authorization header 
     var requestStr = JsonConvert.SerializeObject(new { myParam = viewModel.myParam }); //serialize the object you are passing as a parameter to api.foo.com as Json 
     HttpContent requestBody = new StringContent(requestStr, Encoding.UTF8, "application/json"); 
     var response = await client.PostAsync("myController\\myAction", requestBody); //POST to api.foo.com (or whatever action you want to take) 
     response.EnsureSuccessStatusCode(); 

     var resultstr = response.Content.ReadAsStringAsync().Result; //read the result as a string 
     dynamic resultObj = JsonConvert.DeserializeObject<dynamic>(resultstr); //if desired, deserialize it to an object (I just used dynamic as an example) 
+0

ありがとうございます!まさに私が探していたもの。 – Daath

0

あなたの質問が正しく理解されているかどうかは必ずしも100%ではありません。

名前付きポリシーを使用するAuthorizeAttributeを使用してコントローラ/アクションを装飾する場合、コントローラライブラリを消費するWebアプリケーションは、起動時に名前付きポリシーを定義し、アクセスを許可するロールまたは要求またはその他の要件を構成できます。

[Authorize(Policy = "SystemLogPolicy")] 

起動例:

services.AddAuthorization(options => 
{ 
    options.AddPolicy(
     "SystemLogPolicy", 
     authBuilder => 
     { 
      authBuilder.RequireRole("ServerAdmins"); 
     }); 
} 

は、Webアプリケーション(Iフロントエンドシステムを有することによって、このJSONウェブトークン(JWTs)およびベアラ認証を使用して達成docs on authorization

+0

申し訳ありませんが、私はOPでより明確にすべきでした。では、ポリシーの承認の例を使用しましょう。別のWeb APIアプリケーションでは、そのポリシーをStartupで宣言し、いくつかのAPIメソッドを承認します。それは動作し、今すぐ "webapi.foo.com"で、素晴らしいホストされています。さて、別の新しいWebアプリケーションを作成し、そのAPIからいくつかのメソッドを使いたいとしましょう。だから私は私の質問は2倍だと思う: "webapi.foo.com"でそれらのメソッドを呼び出すにはどうすればいいですか?どうすれば私のアプリに許可されたメソッドを呼び出す権限があることを確認できますか? – Daath

+0

私はあなたの質問を編集してより明確にするべきだと思うかもしれませんが、おそらくあなたはjwtを見てみるようです。 –

関連する問題