現在、私のパイプラインで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の内部に含まれているものを提出する多くのコードを複製していますようにそれは感じています。
私は単純に見落としやすい方法がありますか?
私は構文的な砂糖にいくつかの変更を加えましたが、基本的な考え方は変わりません。マニュアルであると思われるワンピースは、Resource Uriを設定しています。しかし、複数のリソースのトークンを要求しなければならない場合、それは最良の方法で残しておき、AccountServiceなどの静的メソッドを呼び出すだけです。 –