Microsoft is constantly improving and updating their systems, therefore is a permanent challenge to keep your up to date. Now, as ACS app-only access token is deprecated, you need to change authentication methods to use Azure AD only access. One of the way is to use a certificate, which seems to work fine from an MVC application.
Create Certificates
Basically you need to create a certificate file (.cer extension) and a personal information file (.pfx extension). You can create them with PowerShell script below (I cannot take the credits for it, is not mine, but is tested and worked).
$cert = New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\CurrentUser\My
$password = ConvertTo-SecureString -String "password" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath .\my.pfx -Password $password<br>Export-Certificate -Cert $cert -FilePath .\my.cer
First file needs to be uploaded in Azure application registration, in certificates and secrets section.

The second one, personal information file, should be stored locally to be used by the code.
PnP.Framework.AuthenticationManager manager = new PnP.Framework.AuthenticationManager("clientapplicationid", "C:\folder\my.pfx", "pfxFilePassword", "tenantid");
ClientContext ctx = await manager.GetContextAsync("https://4q234m.sharepoint.com/sites/BMS");
Microsoft.SharePoint.Client.Web oWeb = ctx.Web;
Microsoft.SharePoint.Client.List oList = oWeb.Lists.GetByTitle("AccessLogs");
CamlQuery query = new CamlQuery();
query.ViewXml = @"<View><Query><Where><IsNull><FieldRef Name='DisabledOn' /></IsNull></Where></Query></View>";
ListItemCollection oItems = oList.GetItems(query);
ctx.Load(oItems);
ctx.ExecuteQuery();
I am using GetContextAsync method, because, for some reasons, GetContext methods freeze the solution.