Я обновил и столкнулся с этой проблемой, когда UseIdentity()
недоступен в StartUp.cs при создании приложения (ApplicationBuilder).
Веб-сервис использует его, так какое исправление рекомендуется? Контроллер MVC имеет атрибут, проверенный на действительную идентичность. OnAuthorizationAsync
в классе атрибутов фильтра действительно проверяет активную идентичность. Здесь пользовательская аутентификация basi c проходит в логине.
// Startup.cs
public void Configure(IApplicationBuilder applicationBuilder, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{
// Webservice API access.
applicationBuilder.UseWhen(context =>
!context.Request.Path.StartsWithSegments(new PathString("/api/v1")),
b => b.UseIdentity()
);
applicationBuilder.UseWhen(context =>
!context.Request.Path.StartsWithSegments(new PathString("/api/v1")),
b => b.UseAuthentication()
);
}
// MerchantsV1Controller.cs
[TypeFilter(typeof(AuthorizeWithNoChallengeFilterAttribute))]
public class MerchantsV1Controller : Controller
{
}
// AuthorizeWithNoChallengeFilterAttribute.cs
public class AuthorizeWithNoChallengeFilterAttribute : IAsyncAuthorizationFilter
{
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
if (!context.HttpContext.User.Identity.IsAuthenticated)
context.Result = new UnauthorizedResult();
await Task.CompletedTask;
}
}