public Task GrantAuthorizationCode(GrantAuthorizationCodeContext context)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Called when a request to the Token endpoint arrives with a "grant_type" of "authorization_code". This occurs after the authorization
 /// endpoint as redirected the user-agent back to the client with a "code" parameter, and the client is exchanging that for an "access_token".
 /// The claims and properties associated with the authorization code are present in the context.Ticket.
 /// The token request is automatically handled, but the application can call context.Rejected to instruct the Authorization Server middleware to reject the authorization code.
 /// The application may explicitly call context.Validated and flow a different AuthenticationTicket or ClaimsIdentity in order to control which information flows from authorization code to access token.
 /// The default behavior when using the OpenIdConnectServerProvider is to flow information from the authorization code to the access token unmodified.
 /// See also http://tools.ietf.org/html/rfc6749#section-4.1.3
 /// </summary>
 /// <param name="context">The context of the event carries information in and results out.</param>
 /// <returns>Task to enable asynchronous execution</returns>
 public virtual Task GrantAuthorizationCode(GrantAuthorizationCodeContext context) => OnGrantAuthorizationCode(context);