Застрял на установке аутентификации/авторизацииC#

Место общения программистов C#
Anonymous
 Застрял на установке аутентификации/авторизации

Сообщение Anonymous »

Я хотел бы настроить аутентификацию и авторизацию для моего проекта, у меня есть небольшой опыт работы с Identity Server, так как большинство моих клиентов используют ее, но, поскольку он в основном настроен, у меня нет опыта в настройке самостоятельно. /p>
Я смотрю на образцы документации, кодекзаз и все остальное, но я застрял. Документация состоит в том, чтобы аутентификация фронта в бэкэнд, где мне нравится использовать имя пользователя и пароль, 2FA, .... < /p>
Мой проект будет средней архитектурой микро службы, которая будет в настоящее время организован в .NET ASPIRE и с использованием .NET 8.0. /> Для Frontend я собираюсь с Blazor Web App или Blazor Server и WASM. Этот шаблон создает 2 сборки - клиент и сервер. Поскольку я хочу имена пользователей и пароли, я пошел с типом учетной записи «отдельные учетные записи», это дает мне все страницы, которые я хочу. Логика, которая уже находится в моем проекте API идентификатора Backend Identity Server, в основном ApplicationDbContext и миграции. В любом случае, я не могу запустить свой фронт, так как он дает мне ошибку впрыскивания зависимостей на пользовательском Mananager .
Я пытался добавить это даже жестко, что его никогда не было.

Код: Выделить всё

builder.Services.AddScoped();
builder.Services.AddScoped();
< /code>

Невозможно разрешить службу для типа 'microsoft.aspnetcore.identity.iuserstore1[Xyflux.Frontend.Data.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager< /code> 1 [xyflux.frontend.data.applicationUser] '< /p>
< /blockquote>

system.aggregateException:' Некоторые службы не являются службами Способен быть построен (ошибка при проверке дескриптора службы 'Servicetype: microsoft.aspnetcore.identity.usermanager1[Xyflux.Frontend.Data.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.UserManager
1 [xyflux.frontend.data.applicationuser] ': невозможно разрешить службу для типа' microsoft.aspnetcore.identity.iuserstore

Код: Выделить всё

1[Xyflux.Frontend.Data.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager
1 [xyflux.frontend.data.applicationUser] '.) (Ошибка при проверке Descriptor Service' Servicetype: microsoft.aspnetcore.identity.signinManager

Код: Выделить всё

1[Xyflux.Frontend.Data.ApplicationUser] Lifetime: Scoped ImplementationType: Microsoft.AspNetCore.Identity.SignInManager
1 [xyflux.frontend.data.applicationuser] ': невозможно разрешить службу для типа' microsoft.aspnetcore.identity.iuserstore

Код: Выделить всё

1[Xyflux.Frontend.Data.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager
1 [xyflux.frontend.data.applicationUser] '.) (Ошибка при проверке дескриптора службы' ServiceType: xyflux.frontend.components.account.identityUseraccorse Lifetime: scoped infalationtype: xyflux.frontend.components.Acount ': Невозможно разрешить обслуживание для типа 'Microsoft.aspnetcore.identity.iuserstore

Код: Выделить всё

1[Xyflux.Frontend.Data.ApplicationUser]' while attempting to activate 'Microsoft.AspNetCore.Identity.UserManager
1 [xyflux.frontend.data.applicationuser] '.)'

и полный di
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Identity;
using Xyflux.Frontend.Components;
using Xyflux.Frontend.Components.Account;
using Xyflux.Frontend.Data;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();

builder.Services.AddCascadingAuthenticationState();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();

builder.Services.AddBff();

builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.Cookie.Name = "BlazorApp.Cookie";
options.Cookie.HttpOnly = true;
options.SlidingExpiration = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://localhost:5001";
options.ClientId = "blazor-client";
options.ClientSecret = "your_client_secret";
options.ResponseType = "code";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("api1");
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.ForwardSignIn = "";

});

builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});

builder.Services.AddSingleton();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseWebAssemblyDebugging();
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseHttpsRedirection();

app.UseAuthentication();
app.UseAuthorization();

app.UseStaticFiles();
app.UseAntiforgery();

app.MapRazorComponents()
.AddInteractiveServerRenderMode()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(Xyflux.Frontend.Client._Imports).Assembly);

// Add additional endpoints required by the Identity /Account Razor components.
app.MapAdditionalIdentityEndpoints();

app.Run();
< /code>
Я также использую структуру duende.bff. ?

Подробнее здесь: https://stackoverflow.com/questions/794 ... tion-setup

Вернуться в «C#»