What needs to be done for ASP.NET Core MVC?

So here is what i did

Using my local keycloak server (thru docker), i created a realm, users, role and client

I set up credentials and got secret key and stuff and thats it, i havent set anything, no mappers, client scope, etc.
I did this as our other applications that is using other languages such as PHP or nodejs have similar settings.

then I created a fresh ASP.NET Core MVC application and setup the openid options like so

services.AddAuthentication(options =>
        {
            //Sets cookie authentication scheme
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })

        .AddCookie(cookie =>
        {
            //Sets the cookie name and maxage, so the cookie is invalidated.
            cookie.Cookie.Name = "keycloak.cookie";
            cookie.Cookie.MaxAge = TimeSpan.FromMinutes(60);
            cookie.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
            cookie.SlidingExpiration = true;
        })
        .AddOpenIdConnect(options =>
        {
            //Use default signin scheme
            options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            //Keycloak server
            options.Authority = Configuration.GetSection("Keycloak")["ServerRealm"];
            //Keycloak client ID
            options.ClientId = Configuration.GetSection("Keycloak")["ClientId"];
            //Keycloak client secret
            options.ClientSecret = Configuration.GetSection("Keycloak")["ClientSecret"];

            //Keycloak .wellknown config origin to fetch config
            // options.MetadataAddress = Configuration.GetSection("Keycloak")["Metadata"];
            //Require keycloak to use SSL
            options.RequireHttpsMetadata = false;
            options.GetClaimsFromUserInfoEndpoint = true;
            options.Scope.Add("openid");
            options.Scope.Add("profile");
            options.Scope.Add("email");

            //Save the token
            options.SaveTokens = true;
            //Token response type, will sometimes need to be changed to IdToken, depending on config.
            options.ResponseType = OpenIdConnectResponseType.Code;
            //SameSite is needed for Chrome/Firefox, as they will give http error 500 back, if not set to unspecified.
            options.NonceCookie.SameSite = SameSiteMode.None;
            options.CorrelationCookie.SameSite = SameSiteMode.None;
            
            options.TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = "name",
                RoleClaimType = "https://schemas.scopic.com/roles"
            };

            Configuration.Bind("<Json Config Filter>", options);
            options.Events.OnRedirectToIdentityProvider = async context =>
            {
                context.ProtocolMessage.RedirectUri = "http://localhost:13636/home";
                await Task.FromResult(0);
            };

        });
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

and in my HomeController like so

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        bool value = User.Identity.IsAuthenticated;
        return View();
    }

    [Authorize]
    public IActionResult Privacy()
    {
        return View();
    }
}

when i access localhost:13636/Privacy to test, the Keycloak login page is triggered which is correct,
but after succesful login and redirects to /home, User.Identity.IsAuthenticated is false and it seems like the application doesnt know that authentication is succesful.
What needs to be done after this?
or am I missing some configuration/settings/options?

Hello,
I’ve been using keycloak in .NET MVC for the last few years.
The life saver is this library from mattmorg55: https://github.com/mattmorg55/Owin.Security.Keycloak
It just works fine, just follow the sample application to configure your application.

Also a great tool for every subsequent call to Keycloak API is this library: https://github.com/lvermeulen/Keycloak.Net

Hope this helps!

1 Like