я создаю проект blazor wasm я использую компанию oidc так что в wasm у меня есть
builder.Services.AddOidcAuthentication(opt =>
{
opt.ProviderOptions.Authority = "https://xx.zz.pl/auth/cp";
opt.ProviderOptions.ClientId = "xxx";
opt.ProviderOptions.DefaultScopes.Add("email");
opt.ProviderOptions.ResponseType = "code";
});
и у меня есть API, настроенный для использования этого
builder.Services
.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "https://xx.zz.pl/auth/cp";;
});
и это работает нормально, но вопрос в том, как пропустить эту часть входа в систему во время отладки, чтобы у меня не было каждый раз, когда я запускаю вход в систему с моей учетной записью corp
я могу сделать часть API, если отладить, то разрешить анонимность, и это будет нормально работать для каждого запроса.
но как в этом интерфейсе webassembly
жестко запрограммировать некоторую учетную запись «суперадминистратора» со всеми разрешениями, чтобы она всегда использовала это во время отладки? как поддельный oidc?
спасибо и привет!
Если вы просто хотите создать своего собственного локального пользователя ClaimsPrincipal, то я использовал этот код в своем классе Startup.cs (конвейер запросов) для создания конечных точек /login и /logout:
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/login", async context =>
{
var claims = new Claim[]
{
//Standard claims
new Claim(ClaimTypes.Name, "Joe Svensson"),
new Claim(ClaimTypes.Country, "Sweden"),
new Claim(ClaimTypes.Email, "[email protected]"),
//Custom claims
new Claim("JobTitle", "Developer"),
new Claim("JobLevel", "Senior"),
};
ClaimsIdentity identity = new ClaimsIdentity(claims: claims,
authenticationType: CookieAuthenticationDefaults.AuthenticationScheme);
ClaimsPrincipal user = new ClaimsPrincipal(identity: identity);
var authProperties = new AuthenticationProperties
{
IsPersistent = true
};
//Sign-in the user
await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user, authProperties);
await context.Response.WriteAsync("<!DOCTYPE html><body>");
await context.Response.WriteAsync("<h1>Logged in!</h1>");
});
endpoints.MapGet("/logout", async context =>
{
//Do add a call to the signout method here
await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await context.Response.WriteAsync("<!DOCTYPE html><body>");
await context.Response.WriteAsync("<h1>Logged out</h1>");
});
Я надеюсь, что это может вдохновить вас.
Мой код выше использовался в классическом основном приложении ASP.NET. Но я думаю, что в blazor это может работать в любом случае, ядром является часть SignInAsync. Вы можете поместить его в блок App.Use(), если хотите, чтобы каждый запрос имел действительного пользователя"?
я думаю, это может быть на стороне сервера blazor, но веб-сборка совершенно другая
хорошо, так что я в конце концов сделал в веб-сборке
if (builder.HostEnvironment.IsDevelopment())
{
builder.Services.AddScoped<AuthenticationStateProvider,
DebugAuthStateProvicer>();
}
else
builder.Services.AddOidcAuthentication......
и этот провайдер нравится
public class DebugAuthStateProvicer : AuthenticationStateProvider
{
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
var identity = new ClaimsIdentity();
var claims = new List<Claim> { new Claim(ClaimTypes.Name, "DebugAdmin") };
claims.Add(new Claim(ClaimTypes.Role, "Admin"));
identity = new ClaimsIdentity(claims, "Server authentication");
}
return new AuthenticationState(new ClaimsPrincipal(identity));
}
Используете ли вы его в проекте blazor wasm? или на стороне сервера blazor?