Ich verwende derzeit Code in meiner Pipeline, um das Bearer-Token für die Graph-API mit Azure AD zwischenzuspeichern. Dieser Code wurde von einer funktionierenden ASP.NET 4-Anwendung portiert, aber es scheint, als ob die neuen OpenIdConnectOptions in Core dies erleichtern sollten. Gibt es einen direkteren Aufruf, den ich in dem OnAuthorizationCodeReceived-Ereignis verwenden kann, das das AuthenticationContext zu dem Zwischenspeichern des Tokens verwendet, sobald der Code empfangen wird? Hier ist mein aktueller Code:Verwenden von OnAuthorizationCodeReceived zum Abrufen von 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);
}
}
});
Der obige Code funktioniert gut, aber es fühlt sich an wie ich eine Menge Code bin Duplizierung nur vorlegen, was vor allem innerhalb der AuthorizationCodeReceivedContext bereits enthalten ist.
Gibt es einen einfacheren Weg, den ich einfach übersehe?
Ich habe ein paar Änderungen an syntaktischem Zucker gemacht, aber das primäre Konzept bleibt gleich. Das eine Stück, das scheinbar manuell ist, setzt den Resource Uri. Wenn ich jedoch Token für mehrere Ressourcen anfordern müsste, könnte es am besten so bleiben, wie es ist, und nur eine statische Methode eines AccountService oder etwas ähnliches aufrufen. –