AI agents: the content index is at /llms.txt. Every page is also available as Markdown — send the request header Accept: text/markdown, or append .md to the page URL.
Xperience Docs

Cookie consent

We use necessary cookies (opens in a new tab) to run our website and improve your experience while browsing. Additional cookies are only used with your consent. You may revoke your consent on the Cookies Policy (opens in a new tab) page or in your browser at any time.

Configure (opens in a new tab)
  • Documentation
    InstallationUsing the Xperience interfaceDeveloping websitesConfiguring XperienceManaging usersSecuring websitesDeploying websitesManaging website contentMultilingual websitesMacro expressionsExternal utilitiesIntegrating 3rd party systemsCustom developmentE-commerce featuresOn-line marketing featuresRelease notes - Xperience 13Xperience terminology glossary
  • Tutorial
    Using the Xperience interfaceDeveloper tutorialBusiness tutorialResource hub for marketers
  • API Examples
    ConfigurationContent managementDevelopmentE-commerceOn-line marketingSocial media
  1. Home
  2. Managing users
  3. User registration and authentication
  4. Integrating Xperience membership

Integrating Xperience membership


Was this page helpful?

Send us feedback Go back to top
  • Community Questions & Answers (opens in a new tab)
  • Contact support (opens in a new tab)

Xperience provides an integration API that allows you to work with Xperience membership data on websites presented by a separate MVC application. The API is available in the Kentico.Membership assembly and namespace, which is provided as part of the Kentico.Xperience.AspNet.Mvc5 integration package.

Xperience provides an integration API that allows you to work with the system's membership data on websites presented by ASP.NET Core applications. The API is available in the Kentico.Membership namespace, which is provided as part of the Xperience.AspNetCore.WebApp integration package.

You can set up the following scenarios:

  • Allow visitors to sign in with Xperience user accounts
  • Allow users to register new accounts on the site (the user data is stored in the shared Xperience database)
  • Allow users to reset their passwords
  • Authorize actions based on Xperience roles
  • Use external services for authentication

The membership integration is based on ASP.NET Identity⁠ (opens in a new tab) and the OWIN⁠ (opens in a new tab) standard. As a result, you can work with user data through the standard approaches that you would use in any ASP.NET MVC application.

Download and examine the LearningKit project⁠ (opens in a new tab) for a sample implementation of the Xperience membership integration.

The membership integration is based on ASP.NET Core Identity⁠ (opens in a new tab). As a result, you can work with user data through the standard approaches that you would use in any ASP.NET Core application.

Download and examine the LearningKit project⁠ (opens in a new tab) for a sample implementation of the Xperience membership integration.

Integrating Xperience membership into your project

Before you can start working with Xperience membership data in your application, you need to register the required API:

  1. Open your MVC project in Visual Studio.

  2. Install the Microsoft.Owin.Host.SystemWeb NuGet package.

  3. Add a Startup.Auth class to your project's App_Start folder (or modify your existing authentication startup file):

    C#
    using System;
    using System.Web;
    using System.Web.Mvc;
    
    using Microsoft.Owin;
    using Microsoft.Owin.Security.Cookies;
    using Microsoft.AspNet.Identity;
    using Owin;
    
    using CMS.Helpers;
    using CMS.SiteProvider;
    
    using Kentico.Membership;
    
    // Assembly attribute that sets the OWIN startup class
    // This example sets the Startup class from the 'LearningKit.App_Start' namespace, not 'LearningKit.App_Start.Basic' used below
    // The active Startup class is defined in Startup.Auth.cs and additionally demonstrates registration of external authentication services
    [assembly: OwinStartup(typeof(LearningKit.App_Start.Startup))]
    
    namespace LearningKit.App_Start.Basic
    {
        public partial class Startup
        {
            // Cookie name prefix used by OWIN when creating authentication cookies
            private const string OWIN_COOKIE_PREFIX = ".AspNet.";
    
            public void Configuration(IAppBuilder app)
            {
                // Registers the Kentico.Membership identity implementation
                app.CreatePerOwinContext(() => KenticoUserManager.Initialize(app, new KenticoUserManager(new KenticoUserStore(SiteContext.CurrentSiteName))));
                app.CreatePerOwinContext<KenticoSignInManager>(KenticoSignInManager.Create);
    
                // Configures the authentication cookie
                UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
                app.UseCookieAuthentication(new CookieAuthenticationOptions
                {
                    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                    // Fill in the name of your sign-in action and controller
                    LoginPath = new PathString(urlHelper.Action("SignIn", "Account")),
                    Provider = new CookieAuthenticationProvider
                    {
                        // Sets the return URL for the sign-in page redirect (fill in the name of your sign-in action and controller)
                        OnApplyRedirect = context => context.Response.Redirect(urlHelper.Action("SignIn", "Account")
                                                     + new Uri(context.RedirectUri).Query)
                    }
                });
    
                // Registers the authentication cookie with the 'Essential' cookie level
                // Ensures that the cookie is preserved when changing a visitor's allowed cookie level below 'Visitor'
                CookieHelper.RegisterCookie(OWIN_COOKIE_PREFIX + DefaultAuthenticationTypes.ApplicationCookie, CookieLevel.Essential);
            }
        }
    }
  1. Open your ASP.NET Core project in Visual Studio.

  2. Install the Microsoft.AspNetCore.Identity NuGet package.

  3. Modify the startup file of your project (Startup.cs by default).

    • In the ConfigureServices method, add types and services required to work with Xperience Identity:

      C#
      using Microsoft.AspNetCore.Identity;
      
      using CMS.Helpers;
      
      using Kentico.Membership;
      C#
      private const string AUTHENTICATION_COOKIE_NAME = "identity.authentication";
      
      public void ConfigureServices(IServiceCollection services)
      {
          ...
          // Adds Xperience services required by the system's Identity implementation
          services.AddScoped<IPasswordHasher<ApplicationUser>, Kentico.Membership.PasswordHasher<ApplicationUser>>();
          services.AddScoped<IMessageService, MessageService>();
      
          services.AddApplicationIdentity<ApplicationUser, ApplicationRole>()
                          // Adds token providers used to generate tokens for email confirmations, password resets, etc.
                          .AddApplicationDefaultTokenProviders()
                          // Adds an implementation of the UserStore for working with Xperience user objects
                          .AddUserStore<ApplicationUserStore<ApplicationUser>>()
                          // Adds an implementation of the RoleStore used for working with Xperience roles
                          .AddRoleStore<ApplicationRoleStore<ApplicationRole>>()
                          // Adds an implementation of the UserManager for Xperience membership
                          .AddUserManager<ApplicationUserManager<ApplicationUser>>()
                          // Adds the default implementation of the SignInManger
                          .AddSignInManager<SignInManager<ApplicationUser>>();
      
          // Adds authentication and authorization services provided by the framework
          services.AddAuthentication();
          services.AddAuthorization();
      
          // Configures the application's authentication cookie
          services.ConfigureApplicationCookie(c =>
          {
              c.LoginPath = new PathString("/");
              c.ExpireTimeSpan = TimeSpan.FromDays(14);
              c.SlidingExpiration = true;
              c.Cookie.Name = AUTHENTICATION_COOKIE_NAME;
          });
      
          // Registers the authentication cookie in Xperience with the 'Essential' cookie level
          // Ensures that the cookie is preserved when changing a visitor's allowed cookie level below 'Visitor'
          CookieHelper.RegisterCookie(AUTHENTICATION_COOKIE_NAME, CookieLevel.Essential);
          ...
      }
    • In the Configure method, register the corresponding middleware:

      C#
      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
      {
          ...
          app.UseRouting();
      
          app.UseAuthentication();
          app.UseAuthorization();
          ...
      }

Registering authentication cookies

We strongly recommend registering all authentication cookies used on your website with an appropriate cookie level (Essential when working with the default cookie level values).

Otherwise you may encounter problems with the cookies being cleared after adjusting the allowed cookie level for visitors (typically when visitors do not consent with tracking). Changes of the allowed cookie level automatically remove all cookies above the given level. Any unregistered cookies are processed with the Visitor level, which is usually too high for basic authentication cookies.

To register a cookie, call the CookieHelper.RegisterCookie method (available in the CMS.Helpers namespace of the Xperience API) in your application's startup code. You can access the default level values in the CookieLevel enumeration.

The Xperience membership implementation is now registered and you can work with the Kentico.Membership API in your application's code. Continue by setting up user authentication. You can also implement the following features:

  • User registration
  • Password reset functionality
  • Role-based authorization for your controller actions
  • Integration of external authentication services

Configuring the membership integration

The configuration of the membership integration provided by Xperience reflects the Security & Membership and Passwords settings configured via the Settings application in the administration interface. The system maps these settings when initializing the KenticoUserManager class.

Setting

Corresponding membership configuration

Notes

Require unique user emails

UserManager.UserValidator.RequireUniqueEmail⁠ (opens in a new tab)

These settings are mapped during the KenticoUserManger.Initialize call.

Reset password interval

UserManager.UserTokenProvider.TokenLifespan⁠ (opens in a new tab)

When configuring membership for your application, do not override the mentioned UserManager configuration unless you explicitly intend to do so. Otherwise, you effectively remove the ability to configure the corresponding behavior via the administration interface.

The configuration of the Identity classes provided by Xperience (ApplicationUserManager, ApplicationUserStore, etc.) reflects the Security & Membership and Passwords settings configured via the Settings application in the administration interface. To ensure these settings do not interfere with existing Identity functionality, the system maps certain settings to the Identity configuration⁠ (opens in a new tab).

The following table details the mapping of all Xperience settings to ASP.NET Core Identity configuration options:

Settings

Identity configuration option

Notes

Require unique user emails

IdentityOptions.User.RequireUniqueEmail⁠ (opens in a new tab)

These settings are mapped as part of the AddApplicationIdentity call before the user-provided Identity configuration is applied.

Registration requires administrator's approval

IdentityOptions.SignIn.RequireConfirmedAccount⁠ (opens in a new tab)

Reset password interval

DataProtectionTokenProviderOptions.TokenLifespan⁠ (opens in a new tab)

This configuration is set during the AddApplicationDefaultTokenProviders call.

If the reset interval is set to 0, the password reset token expiration defaults to 24 hours.

When configuring Identity for your application, do not override these options unless you explicitly intend to do so. Otherwise, you effectively remove the ability to configure the corresponding behavior via the administration interface.

Related pages

  • Setting up authentication
  • Enabling user registration
  • Implementing password reset for the live site
  • Configuring external authentication
  • Authorizing live site actions via roles
  • User management
  • Adding custom fields to users