#authentication #token #blazor #server-side
#аутентификация #токен #blazor #на стороне сервера
Вопрос:
У меня есть ASP.net основной ВЕБ-API, который я защитил с помощью локальной учетной записи пользователя (для его создания использовался шаблон WASM blazor). Я могу успешно аутентифицировать и вызывать webapi с помощью клиента WASM.
У меня есть отдельное серверное приложение Blazor, которое пытается вызвать этот WebAPI, который снова был защищен с помощью локальной учетной записи пользователя и той же базы данных удостоверений).
В приложении wasm (webapi) я настраиваю безопасность следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("https://localhost:44339");
});
});
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
services.AddControllersWithViews();
services.AddRazorPages();
В серверном приложении я настраиваю безопасность следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => { options.SignIn.RequireConfirmedAccount = true; })
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddScoped<AuthenticationStateProvider,
RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
services.AddHttpClient();
Затем в серверном приложении я пытаюсь получить токены в файле _Host.cshtml, чтобы я мог добавить их в заголовок клиента, но они всегда возвращаются нулевыми.
AccessToken = await HttpContext.GetTokenAsync("access_token"),
RefreshToken = await HttpContext.GetTokenAsync("refresh_token")
Я полный новичок в этой области безопасности, поэтому понимаю, что, возможно, это совершенно неправильно. Может ли кто-нибудь указать мне, что я делаю неправильно, или мне нужно сделать что-то еще, чтобы получить эти токены?
Заранее большое спасибо, Гордон