I’m currently developing a project in ASP .NET Core 3.1, which has an MVC front-end and an integrated API back end. I’d like to be able to have cookie authentication for the MVC front-end, but JWT for the API. My API will only ever be called machine-to-machine, and I’ve been able to get either solution working individually, but I can’t seem to find any examples of how I would have both.
Is this even possible?
My current Startup.cs looks like:
 services.Configure<CookiePolicyOptions>(options =>                     {                         // This lambda determines whether user consent for non-essential cookies is needed for a given request.                         options.CheckConsentNeeded = context => true;                         options.MinimumSameSitePolicy = SameSiteMode.None;                     });
            // Add authentication services
            services.AddAuthentication(options => {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.Authority = "https://authtoken.auth0.com";
                options.Audience = "https://www.someapi.com";
            })
            .AddCookie()
            .AddOpenIdConnect("Auth0", options => {
        // Set the authority to your Auth0 domain
        options.Authority = $"https://{Configuration["Auth0:Domain"]}";
        // Configure the Auth0 Client ID and Client Secret
        options.ClientId = Configuration["Auth0:ClientId"];
                options.ClientSecret = Configuration["Auth0:ClientSecret"];
        // Set response type to code
        options.ResponseType = OpenIdConnectResponseType.Code;
        // Configure the scope
        options.Scope.Add("openid");
        // Set the callback path, so Auth0 will call back to http://localhost:3000/callback
        // Also ensure that you have added the URL as an Allowed Callback URL in your Auth0 dashboard
        options.CallbackPath = new PathString("/callback");
        // Configure the Claims Issuer to be Auth0
        options.ClaimsIssuer = "Auth0";
                options.Events = new OpenIdConnectEvents
                {
                    OnRedirectToIdentityProvider = context =>
                    {
                        context.ProtocolMessage.SetParameter("audience", "https://www.someapi.com");
                        return Task.FromResult(0);
                    },
                    // handle the logout redirection
                    OnRedirectToIdentityProviderForSignOut = (context) =>
                    {
                        var logoutUri = $"https://{Configuration["Auth0:Domain"]}/v2/logout?client_id={Configuration["Auth0:ClientId"]}";
                        var postLogoutUri = context.Properties.RedirectUri;
                        if (!string.IsNullOrEmpty(postLogoutUri))
                        {
                            if (postLogoutUri.StartsWith("/"))
                            {
                        // transform to absolute
                        var request = context.Request;
                                postLogoutUri = request.Scheme + "://" + request.Host + request.PathBase + postLogoutUri;
                            }
                            logoutUri += $"&returnTo={ Uri.EscapeDataString(postLogoutUri)}";
                        }
                        context.Response.Redirect(logoutUri);
                        context.HandleResponse();
                        return Task.CompletedTask;
                    }
                };
            });
Thank you in advance and sorry if this has already been answered, I searched around and couldn’t find anything