ASP.NET Core 2.0 프로젝트에 Identity를 사용하여 인증을 구현하려고하는데 작동하지 않는 것 같습니다. Identity를 구현하는 마지막 프로젝트는 ASP.NET MVC 5 프로젝트 였고, 상황이 크게 바뀌 었습니다. 코어 1.0과 1.1을 건너 뛰었으므로, 필자가 읽고있는 것에서는 거의 비슷하다고 가정 했음에도 불구하고, 코어 1.0과 1.1을 생략했다.ASP.NET Core 2.0 인증이 작동하지 않습니다.
나는 나를 위해 일할 수 없다. 내가 작동하지 않는다고 말할 때, 나는 권한이 없어도 로그인 페이지로 리디렉션되지 않는다는 것을 의미합니다.
내가 한 유일한 사용자 지정은 역할을 사용하지 않으므로 자신의 사용자 저장소와 내 확장 프로그램을 구현하여 역할이 필요없는 ID를 추가하는 것입니다. 나는 내 관점에서 모든 것이 이제는 너무 복잡하기 때문에 내가 어수선한 것에 어떤 방향을 사용할 수있다.
Startup.cs
public void ConfigureServices(
IServiceCollection services) {
services.AddDbContext<CustomDbContext>();
services.AddTransient<IUserStore<GlobalUser>, CustomUserStore<GlobalUser>>();
services.AddIdentity<GlobalUser>();
services.AddMvc();
}
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
} else {
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc();
}
ServiceCollectionExtensions.cs 난 그냥 AddIdentity<TUser, TRole>
내장의 소스를 쳐다 보면서 역할을 생략
: 여기에 지금까지있어 코드입니다 관련 항목이 없으므로 여기에 문제가 없어야합니다 ...
public static class ServiceCollectionExtensions {
public static IdentityBuilder AddIdentity<TUser>(
this IServiceCollection services,
Action<IdentityOptions> optionsAction = null)
where TUser : class {
services.AddAuthentication(
o => {
o.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
o.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ApplicationScheme;
}).AddCookie(
o => {
o.LoginPath = new PathString("/Login");
o.Events = new CookieAuthenticationEvents {
OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync
};
});
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.TryAddScoped<IUserValidator<TUser>, UserValidator<TUser>>();
services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
services.TryAddScoped<IPasswordHasher<TUser>, PasswordHasher<TUser>>();
services.TryAddScoped<ILookupNormalizer, UpperInvariantLookupNormalizer>();
services.TryAddScoped<IdentityErrorDescriber>();
services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<TUser>>();
services.TryAddScoped<IUserClaimsPrincipalFactory<TUser>, UserClaimsPrincipalFactory<TUser>>();
services.TryAddScoped<UserManager<TUser>, AspNetUserManager<TUser>>();
services.TryAddScoped<SignInManager<TUser>, SignInManager<TUser>>();
if (optionsAction != null) {
services.Configure(optionsAction);
}
return new IdentityBuilder(typeof(TUser), services);
}
}
MVC 5처럼 Authorize 필터를 추가해야한다고 생각했지만 전 세계적으로 그렇게 할 수 없습니다. 내가 기본 컨트롤러에 적용하면, 다음과 같은 예외를 얻을 :
없음 authenticationScheme이 지정을하고, DefaultChallengeScheme를 찾을 수없는 없었다.
그러나 나는 사용자 정의 AddIdentity
방법으로 구성표를 설정하고 있다고 생각 했습니까? 나는 약간의 지침을 사용할 수 있었고 어떤 방식 으로든 보내 주시면 감사하겠습니다.
당신은 컨트롤러에서 권한 부여 속성의 일부로에 계획을 통과 했 ... 결국 내 자신의 결정의 문제인가? 이렇게 :'[Authorize (AuthenticationSchemes = IdentityConstants.ApplicationScheme)]', 또는 이와 비슷한 것? 'IdentityConstants.ApplicationScheme'이 필요한 열거 형인지 여부는 알 수 없습니다. –
그래서 "Identity.Application"을 제안한 스키마로 하드 코드했는데 이제 예외는 '인증 핸들러가 스키마 : Identity.Application'에 대해 인증하도록 구성되어 있지 않습니다. 나는이 계획에 어려움을 겪고있다. Identity와 쿠키 인증을 원한다는 것을 ASP.NET에 알리는 올바른 방법은 무엇입니까? – Gup3rSuR4c