Files
Umbraco-CMS/src/Umbraco.Web.BackOffice/Extensions/UmbracoBackOfficeServiceCollectionExtensions.cs

70 lines
3.0 KiB
C#
Raw Normal View History

using System;
using System.Security.Claims;
2020-05-15 16:52:51 +01:00
using Microsoft.AspNetCore.Identity;
2020-05-15 15:21:15 +01:00
using Microsoft.Extensions.DependencyInjection;
2020-05-18 08:21:34 +01:00
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using Umbraco.Core;
using Umbraco.Core.BackOffice;
using Umbraco.Core.Configuration;
using Umbraco.Net;
using Umbraco.Web.Common.AspNetCore;
2020-05-15 15:21:15 +01:00
namespace Umbraco.Extensions
{
public static class UmbracoBackOfficeServiceCollectionExtensions
{
public static void AddUmbracoBackOfficeIdentity(this IServiceCollection services)
2020-05-15 15:21:15 +01:00
{
2020-05-18 08:21:34 +01:00
services.AddDataProtection();
2020-05-18 13:00:32 +01:00
services.TryAddScoped<IIpResolver, AspNetCoreIpResolver>();
services
.AddIdentityCore<BackOfficeIdentityUser>()
2020-05-15 15:21:15 +01:00
.AddDefaultTokenProviders()
.AddUserStore<BackOfficeUserStore>()
2020-05-18 08:21:34 +01:00
.AddUserManager<BackOfficeUserManager>()
.AddClaimsPrincipalFactory<BackOfficeClaimsPrincipalFactory<BackOfficeIdentityUser>>();
services.ConfigureOptions<UmbracoBackOfficeIdentityOptions>();
2020-05-18 08:21:34 +01:00
services.AddScoped<ILookupNormalizer, NopLookupNormalizer>();
services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<BackOfficeIdentityUser>>();
2020-05-15 15:21:15 +01:00
}
/// <summary>
/// Used to configure <see cref="IdentityOptions"/> for the Umbraco Back office
/// </summary>
private class UmbracoBackOfficeIdentityOptions : IConfigureOptions<IdentityOptions>
{
private readonly IUserPasswordConfiguration _userPasswordConfiguration;
public UmbracoBackOfficeIdentityOptions(IUserPasswordConfiguration userPasswordConfiguration)
{
_userPasswordConfiguration = userPasswordConfiguration;
}
public void Configure(IdentityOptions options)
{
options.User.RequireUniqueEmail = true;
options.ClaimsIdentity.UserIdClaimType = ClaimTypes.NameIdentifier;
options.ClaimsIdentity.UserNameClaimType = ClaimTypes.Name;
options.ClaimsIdentity.RoleClaimType = ClaimTypes.Role;
options.ClaimsIdentity.SecurityStampClaimType = Constants.Web.SecurityStampClaimType;
options.Lockout.AllowedForNewUsers = true;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromDays(30);
options.Password.RequiredLength = _userPasswordConfiguration.RequiredLength;
options.Password.RequireNonAlphanumeric = _userPasswordConfiguration.RequireNonLetterOrDigit;
options.Password.RequireDigit = _userPasswordConfiguration.RequireDigit;
options.Password.RequireLowercase = _userPasswordConfiguration.RequireLowercase;
options.Password.RequireUppercase = _userPasswordConfiguration.RequireUppercase;
options.Lockout.MaxFailedAccessAttempts = _userPasswordConfiguration.MaxFailedAccessAttemptsBeforeLockout;
}
}
2020-05-15 15:21:15 +01:00
}
}