0

現在、私のパイプラインでAzure ADを使用してグラフAPIのベアラトークンをキャッシュするコードを使用しています。このコードは、動作中のASP.NET 4アプリケーションから移植されましたが、Coreの新しいOpenIdConnectOptionsがこれをより簡単にするように感じています。 OnAuthorizationCodeReceivedイベントで使用できるより直接的な呼び出しがあります。OnAuthorizationCodeReceivedイベントは、コードを受け取った後でAuthenticationContextを使用してトークンをキャッシュしますか?ここに私の現在のコードは次のとおりです。OnAuthorizationCodeReceivedを使用してAzure GraphAPI AccessTokenを取得する

var azureSettings = app.ApplicationServices.GetService<IOptions<AzureSettings>>().Value; 
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    ClientId = azureSettings.ClientId, 
    ClientSecret = azureSettings.AppKey, 
    Authority = string.Format(azureSettings.AadInstance, azureSettings.TenantId), 
    Resource = azureSettings.GraphResourceUri, 
    ResponseType = OpenIdConnectResponseType.CodeIdToken, 
    TokenValidationParameters = new TokenValidationParameters 
    { 
     RoleClaimType = "roles" 
    }, 
    Events = new OpenIdConnectEvents() 
    { 
     OnAuthorizationCodeReceived = (context) => 
     { 
      string resourceUri = azureSettings.GraphResourceUri; 
      var authContext = new AuthenticationContext(context.Options.Authority); 
      var credential = new ClientCredential(context.TokenEndpointRequest.ClientId, context.TokenEndpointRequest.ClientSecret); 
      var result = authContext.AcquireTokenByAuthorizationCodeAsync(context.TokenEndpointRequest.Code, new Uri(context.TokenEndpointRequest.RedirectUri), credential, resourceUri); 

      context.HandleCodeRedemption(result.AccessToken, result.IdToken); 
     } 
    } 
}); 

上記のコードはうまく動作しますが、私はちょうどほとんどがすでにAuthorizationCodeReceivedContextの内部に含まれているものを提出する多くのコードを複製していますようにそれは感じています。

私は単純に見落としやすい方法がありますか?

+0

私は構文的な砂糖にいくつかの変更を加えましたが、基本的な考え方は変わりません。マニュアルであると思われるワンピースは、Resource Uriを設定しています。しかし、複数のリソースのトークンを要求しなければならない場合、それは最良の方法で残しておき、AccountServiceなどの静的メソッドを呼び出すだけです。 –

答えて

0

Microsoft.AspNetCore.Authentication.OpenIdConnectのコードを調べた後、このライブラリがAuthenticationContext内のトークンキャッシュメカニズムから切断されていることがわかりました。私がコードを合理化しようとすると、キャッシング・メカニズムがトリガーされません。つまり、各リクエストでベアラ・トークンを取得する必要があります。

TokenCacheを使用してAPIへの呼び出しを減らし、最終的にRedisキャッシュを活用する予定であるため、そのコードをOnAuthorizationCodeReceivedメソッドに残す必要があります。

関連する問題