* Getting new netcore PublicAccessChecker in place * Adds full test coverage for PublicAccessChecker * remove PublicAccessComposer * adjust namespaces, ensure RoleManager works, separate public access controller, reduce content controller * Implements the required methods on IMemberManager, removes old migrated code * Updates routing to be able to re-route, Fixes middleware ordering ensuring endpoints are last, refactors pipeline options, adds public access middleware, ensures public access follows all hops * adds note * adds note * Cleans up ext methods, ensures that members identity is added on both front-end and back ends. updates how UmbracoApplicationBuilder works in that it explicitly starts endpoints at the time of calling. * Changes name to IUmbracoEndpointBuilder * adds note * Fixing tests, fixing error describers so there's 2x one for back office, one for members, fixes TryConvertTo, fixes login redirect * fixing build * Updates user manager to correctly validate password hashing and injects the IBackOfficeUserPasswordChecker * Merges PR * Fixes up build and notes * Implements security stamp and email confirmed for members, cleans up a bunch of repo/service level member groups stuff, shares user store code between members and users and fixes the user identity object so we arent' tracking both groups and roles. * Security stamp for members is now working * Fixes keepalive, fixes PublicAccessMiddleware to not throw, updates startup code to be more clear and removes magic that registers middleware. * adds note * removes unused filter, fixes build * fixes WebPath and tests * Looks up entities in one query * remove usings * Fix test, remove stylesheet * Set status code before we write to response to avoid error * Ensures that users and members are validated when logging in. Shares more code between users and members. * merge changes * oops * Reducing and removing published member cache * Fixes RepositoryCacheKeys to ensure the keys are normalized * oops didn't mean to commit this * Fix casing issues with caching, stop boxing value types for all cache operations, stop re-creating string keys in DefaultRepositoryCachePolicy * oops didn't mean to comit this * bah, far out this keeps getting recommitted. sorry * cannot inject IPublishedMemberCache and cannot have IPublishedMember * splits out files, fixes build * fix tests * removes membership provider classes * removes membership provider classes * updates the identity map definition * reverts commented out lines * reverts commented out lines * Implements members Password config in db, fixes members cookie auth to not interfere with the back office cookie auth, fixes Startup sequence, fixes startup pipeline * commits change to Startup * Rename migration from `MemberTableColumns2` to `AddPasswordConfigToMemberTable` * Fix test * Fix tests, but adding default passwordConfig to members Co-authored-by: Bjarke Berg <mail@bergmania.dk>
57 lines
3.0 KiB
C#
57 lines
3.0 KiB
C#
using Microsoft.AspNetCore.Identity;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Umbraco.Cms.Core.DependencyInjection;
|
|
using Umbraco.Cms.Core.Security;
|
|
using Umbraco.Cms.Web.Common.Security;
|
|
|
|
namespace Umbraco.Extensions
|
|
{
|
|
public static partial class UmbracoBuilderExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds Identity support for Umbraco members
|
|
/// </summary>
|
|
public static IUmbracoBuilder AddMembersIdentity(this IUmbracoBuilder builder)
|
|
{
|
|
IServiceCollection services = builder.Services;
|
|
|
|
// check if this has already been added, we cannot add twice but both front-end and back end
|
|
// depend on this so it's possible it can be called twice.
|
|
var distCacheBinder = new UniqueServiceDescriptor(typeof(IMemberManager), typeof(MemberManager), ServiceLifetime.Scoped);
|
|
if (builder.Services.Contains(distCacheBinder))
|
|
{
|
|
return builder;
|
|
}
|
|
|
|
// NOTE: We are using AddIdentity which is going to add all of the default AuthN/AuthZ configurations = OK!
|
|
// This will also add all of the default identity services for our user/role types that we aren't overriding = OK!
|
|
// If a developer wishes to use Umbraco Members with different AuthN/AuthZ values, like different cookie values
|
|
// or authentication scheme's then they can call the default identity configuration methods like ConfigureApplicationCookie.
|
|
// BUT ... if a developer wishes to use the default auth schemes for entirely separate purposes alongside Umbraco members,
|
|
// then we'll probably have to change this and make it more flexible like how we do for Users. Which means booting up
|
|
// identity here with the basics and registering all of our own custom services.
|
|
// Since we are using the defaults in v8 (and below) for members, I think using the default for members now is OK!
|
|
|
|
services.AddIdentity<MemberIdentityUser, UmbracoIdentityRole>()
|
|
.AddDefaultTokenProviders()
|
|
.AddUserStore<MemberUserStore>()
|
|
.AddRoleStore<MemberRoleStore>()
|
|
.AddRoleManager<IMemberRoleManager, MemberRoleManager>()
|
|
.AddMemberManager<IMemberManager, MemberManager>()
|
|
.AddSignInManager<IMemberSignInManager, MemberSignInManager>()
|
|
.AddErrorDescriber<MembersErrorDescriber>()
|
|
.AddUserConfirmation<UmbracoUserConfirmation<MemberIdentityUser>>();
|
|
|
|
services.ConfigureOptions<ConfigureMemberIdentityOptions>();
|
|
|
|
services.AddScoped<IMemberUserStore>(x => (IMemberUserStore)x.GetRequiredService<IUserStore<MemberIdentityUser>>());
|
|
services.AddScoped<IPasswordHasher<MemberIdentityUser>, MemberPasswordHasher>();
|
|
|
|
services.ConfigureOptions<ConfigureSecurityStampOptions>();
|
|
services.ConfigureOptions<ConfigureMemberCookieOptions>();
|
|
|
|
return builder;
|
|
}
|
|
}
|
|
}
|