Я создал ASP. NET Core 3.1 веб-сайт и веб-API, проект, в котором он работает с ASpNetIdentity в SQL Серверной базе данных, веб-часть работает нормально ... также я могу аутентифицироваться веб-API и получить access_token ... но когда я пытаюсь получить доступ к своим ресурсам / API / транспортных средств, я получаю перенаправление входа в систему на страницу входа ...
Startup.cs / ConfigureServices
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
services.AddIdentity<IdentityUser, IdentityRole>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
services.Configure<IdentityOptions>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.Password.RequiredLength = 6;
options.Password.RequiredUniqueChars = 1;
options.SignIn.RequireConfirmedEmail = false;
options.SignIn.RequireConfirmedPhoneNumber = false;
options.User.AllowedUserNameCharacters =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
options.User.RequireUniqueEmail = false;
});
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = "/Account/AccessDenied";
options.Cookie.Name = "AgencyCookie";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
options.LoginPath = "/Account/Login";
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
options.SlidingExpiration = true;
});
services.AddControllersWithViews();
services.AddRazorPages();
services.AddMvc(options => options.EnableEndpointRouting = false);//.AddAuthorization();
services.AddDbContext<AgenciaDeTransporteContext>(o =>
{
o.UseSqlServer(connectionString);
});
services.AddScoped<IAgenciaDeTransporteRepository, AgenciaDeTransporteRepository>();
services.AddIdentityServer()
.AddAspNetIdentity<IdentityUser>()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetAllResources())
.AddInMemoryClients(Config.AllClients);
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme);
Startup.cs / Configure
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
app.UseStatusCodePages();
app.UseMvc();
app.UseIdentityServer();
VehiclesController.cs
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class VehiclesController : ControllerBase
{
private readonly IAgenciaDeTransporteRepository _repository;
private readonly ILogger<VehiclesController> _logger;
public VehiclesController(ILogger<VehiclesController> logger, IAgenciaDeTransporteRepository repository)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_repository = repository ?? throw new ArgumentNullException(nameof(repository));
}
[HttpGet]
public IActionResult GetVehicles()
{
return Ok(_repository.GetVehicles());
}
Config.cs
new Client
{
ClientId = "myClient",
ClientName = "My Custom Client",
RequireConsent = false,
ClientSecrets = new List<Secret>{new Secret("secret".Sha256())},
AccessTokenLifetime = 60 * 60 * 24,
AllowedGrantTypes = GrantTypes.ClientCredentials,
RequireClientSecret = false,
AllowAccessTokensViaBrowser = true,
AllowedScopes =
{
"myAPIs"
}
}
Но когда я использую токен, он посылает мне «перенаправление» на страницу входа в систему ...