我在登录时遇到问题,不知道该怎么办。我很确定这与我的程序有关。cs:使用 MudBlazor.Services;使用 Microsoft.AspNetCore.Authentication.OpenIdConnect;使用
我在登录时遇到问题,不知道该怎么办。我很确定这与我的 program.cs 有关:
using MudBlazor.Services;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;
using Serilog;
using System.Configuration;
internal class Program
{
private static void Main(string[] args)
{
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.CreateBootstrapLogger();
Log.Information("App started");
builder.Host.UseSerilog((ctx, lc) => lc
.MinimumLevel.Information()
.WriteTo.Console());
builder.Logging.AddConsole();
//adding dbContext
string[]? initialScopes = builder.Configuration["DownstreamApi:Scopes"]?.Split(' ') ?? builder.Configuration["MicrosoftGraph:Scopes"]?.Split(' ');
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph(builder.Configuration.GetSection("MicrosoftGraph"))
.AddInMemoryTokenCaches();
builder.Services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor()
.AddMicrosoftIdentityConsentHandler();
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents();
builder.Services.AddMudServices(config =>
{
config.SnackbarConfiguration.PositionClass = MudBlazor.Defaults.Classes.Position.TopCenter;
config.SnackbarConfiguration.PreventDuplicates = true;
config.SnackbarConfiguration.NewestOnTop = false;
config.SnackbarConfiguration.ShowCloseIcon = true;
config.SnackbarConfiguration.RequireInteraction = true;
config.SnackbarConfiguration.HideTransitionDuration = 300;
config.SnackbarConfiguration.ShowTransitionDuration = 300;
config.SnackbarConfiguration.SnackbarVariant = MudBlazor.Variant.Filled;
});
builder.Services.AddMudBlazorDialog();
//Adding my services
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseAntiforgery();
app.MapControllers();
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode();
app.Run();
}
}
每次我启动我的应用程序时,第一次都会出现此错误:[MsIdWeb] 获取令牌期间发生错误:没有向 AcquireTokenSilent 调用传递任何帐户或登录提示。
但是登录立即生效,因为它会重试。我只是不知道该怎么做,我认为我无法向登录用户添加声明,因为该用户最初为空。
一开始,我忽略了错误,因为登录仍然可以立即进行,并且我没有遇到任何问题,但是前几天我尝试添加声明时,页面立即卡住了,并且根据日志,每次用户为空时,应用程序都会尝试新的登录。
我尝试了多种不同的方法,而不是 AddAuthentication,但没有成功。
我尝试的另一件事是手动重新登录,当 MsalUiRequiredException 弹出时,它只会强制我登录。但我再次将其删除,因为每次打开网站都会发生这种情况。