2017-09-05 12 views
1

私はAzure ADによって保護されているdotnetコア1.1 Web APIを持っています。私のAngular SPAはadalを使用してユーザーを認証します。バックグラウンドジョブを実行するデーモンアプリケーションもあります。また、Web APIを使用して機能を呼び出したり、データを取得したりします。SPAとデーモンアプリケーション用のjwtトークンの異なるユーザー

これは、マイクロソフトが提供するサンプルに基づいており、hereがあります。

大きな違いは私が別のミドルウェアを使用していることです。私が直面してる問題は、SPAのためアダル経由でADによって生成されたトークンを持っているということです

var authContext = new AuthenticationContext("https://login.microsoftonline.com/##adId##); 
    var clientCredential = new ClientCredential("##serviceCredenitalKey##", "##serviceCredentialSecret##"); 
    var result = await authContext.AcquireTokenAsync(##webApiUri##, clientCredential); 

:APIは、デーモンアプリでJwtBearerAuthentication

  .UseJwtBearerAuthentication(new JwtBearerOptions 
      { 
       TokenValidationParameters = tokenValParam, 
       AutomaticAuthenticate = true, 
       AutomaticChallenge = false, 
       Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]), 
       Audience = Configuration["AzureAd:Audience"], 
      }) 

トークンは、次のコードによって作成されている使用していますオーディエンスとしてのクライアントアプリケーションのclientIdデーモンアプリケーション用に生成されたトークンには、視聴者としてのclientIdがなく、代わりにWeb APIのURIがあります。ミドルウェアに複数の有効なオーディエンスを指定する方法はありません。私は自分自身のバリデーターを使うべきですか?これを解決するための機械工が組み込まれているのですか?

答えて

0

私が考えることができる最も簡単な方法は、すべてのクライアントアプリケーションが同じもの(視聴者)、クライアントIDまたはAPIのURLを使用するように設定することです。デーモンアプリケーションでWeb APIのトークンを取得するときに、クライアントIDをリソースとして使用できます。また、web apiは、有効なオーディエンスとしてクライアントIDを受け入れます。あなたのWeb APIで複数のオーディエンスをサポートしたい場合は、独自のバリデータを作成する必要があります。

関連する問題