- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 ASP.NET Core 中,您可以添加各种识别服务:AddDefaultIdentity
、AddIdentity
和 AddIdentityCore
。
AddIdentity
和 AddIdentityCore
有什么区别?
最佳答案
AddIdentityCore
添加用户管理操作所需的服务,例如创建用户、散列密码等。这是相关的 source :
public static IdentityBuilder AddIdentityCore<TUser>(this IServiceCollection services, Action<IdentityOptions> setupAction)
where TUser : class
{
// Services identity depends on
services.AddOptions().AddLogging();
// Services used by identity
services.TryAddScoped<IUserValidator<TUser>, UserValidator<TUser>>();
services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
services.TryAddScoped<IPasswordHasher<TUser>, PasswordHasher<TUser>>();
services.TryAddScoped<ILookupNormalizer, UpperInvariantLookupNormalizer>();
// No interface for the error describer so we can add errors without rev'ing the interface
services.TryAddScoped<IdentityErrorDescriber>();
services.TryAddScoped<IUserClaimsPrincipalFactory<TUser>, UserClaimsPrincipalFactory<TUser>>();
services.TryAddScoped<UserManager<TUser>>();
...
}
本质上,这归结为注册 UserManager<TUser>
的一个实例, 但首先注册它的所有依赖项。注册这些服务后,您可以检索 UserManager<TUser>
的实例从 DI 并创建用户、设置密码、更改电子邮件等。
AddIdentity
注册与 AddIdentityCore
相同的服务, 还有一些额外的东西:
SignInManager
, 它实际上位于 UserManager
之上作为一种协调器。例如,PasswordSignInAsync
使用 UserManager
检索用户、验证密码(如果已设置),然后负责创建 cookie。AddIdentity
本身也需要一个 TRole
并注册支持角色所需的服务。这是 AddIdentity
source为了完整性:
public static IdentityBuilder AddIdentity<TUser, TRole>(this IServiceCollection services, Action<IdentityOptions> setupAction)
where TUser : class
where TRole : class
{
// Services used by identity
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddCookie(IdentityConstants.ApplicationScheme, o =>
{
o.LoginPath = new PathString("/Account/Login");
o.Events = new CookieAuthenticationEvents
{
OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync
};
})
.AddCookie(IdentityConstants.ExternalScheme, o =>
{
o.Cookie.Name = IdentityConstants.ExternalScheme;
o.ExpireTimeSpan = TimeSpan.FromMinutes(5);
})
.AddCookie(IdentityConstants.TwoFactorRememberMeScheme, o =>
{
o.Cookie.Name = IdentityConstants.TwoFactorRememberMeScheme;
o.Events = new CookieAuthenticationEvents
{
OnValidatePrincipal = SecurityStampValidator.ValidateAsync<ITwoFactorSecurityStampValidator>
};
})
.AddCookie(IdentityConstants.TwoFactorUserIdScheme, o =>
{
o.Cookie.Name = IdentityConstants.TwoFactorUserIdScheme;
o.ExpireTimeSpan = TimeSpan.FromMinutes(5);
});
// Hosting doesn't add IHttpContextAccessor by default
services.AddHttpContextAccessor();
// Identity services
services.TryAddScoped<IUserValidator<TUser>, UserValidator<TUser>>();
services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
services.TryAddScoped<IPasswordHasher<TUser>, PasswordHasher<TUser>>();
services.TryAddScoped<ILookupNormalizer, UpperInvariantLookupNormalizer>();
services.TryAddScoped<IRoleValidator<TRole>, RoleValidator<TRole>>();
// No interface for the error describer so we can add errors without rev'ing the interface
services.TryAddScoped<IdentityErrorDescriber>();
services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<TUser>>();
services.TryAddScoped<ITwoFactorSecurityStampValidator, TwoFactorSecurityStampValidator<TUser>>();
services.TryAddScoped<IUserClaimsPrincipalFactory<TUser>, UserClaimsPrincipalFactory<TUser, TRole>>();
services.TryAddScoped<UserManager<TUser>>();
services.TryAddScoped<SignInManager<TUser>>();
services.TryAddScoped<RoleManager<TRole>>();
...
}
关于c# - AddIdentity 与 AddIdentityCore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55361533/
有很多关于此的示例,但没有一个示例说明如何将字符串形式的 .ppk 公共(public)/私有(private)文件组件转换为 byte[] 并使用使用 JSch.addIdentity(String
public class FTP { public static void main(String args[]){ JSch jsch = new JSch(); jsch.se
在 ASP.NET Core 中,您可以添加各种识别服务:AddDefaultIdentity、AddIdentity 和 AddIdentityCore。 AddIdentity 和 AddIden
我有一种情况,我想将 ASP.NET Identity 用户(数据库优先)的密码长度更改为 4。经过大量研究,我发现我可以从启动类开始使用: public void ConfigureServices
我指的是 public void addIdentity(String name, byte[] prvkey,
这个问题在这里已经有了答案: JSch to add private key from a string (1 个回答) 关闭 4 年前。 我需要从 hadoop 集群连接到 sftp 服务器。我想
我一直在使用 JSch 与 OpenSSH 服务器建立 SFTP 连接,在此过程中,当我尝试以 URI 的形式添加私钥作为身份时,私钥无法被识别。 当我尝试从浏览器运行该 URL 时,它工作正常。 我
我有一个简单的 WebApi 项目,它使用 IdentityServer4.AccessTokenValidation验证 IdentityServer4 发出的 token 服务器在开发地址:htt
我正在尝试将 facebook 登录添加到我的 .NET Core 2.1 网站 我正在关注this ,指南,更具体,this (for facebook login) 将以下行添加到startup.
使用 Identity Server 4、.NetCore2.0 和 MS Identity 与隐式流/授权类型; 我不清楚以下各项的责任,因为每一项都特别涉及验证/授权不记名 token 。 我有以
我是一名优秀的程序员,十分优秀!