Blazor服务器,在IIS中使用Microsoft身份标识,带有虚拟应用程序

vxf3dgd4  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(115)

我已经使用标准的Visual Studio 2022模板创建了一个Blazor Server项目,并将身份验证设置为Microsoft Identity。
当我尝试在虚拟应用程序中将其部署到IIS服务器上的默认网站时,它给出了以下错误:

Program.cs:

var builder = WebApplication.CreateBuilder(args);

var 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 =>
{
    // By default, all incoming requests will be authorized according to the default policy
    options.FallbackPolicy = options.DefaultPolicy;
});

builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor()
    .AddMicrosoftIdentityConsentHandler();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseStaticFiles();

app.UseRouting();

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

app.MapControllers();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

我认为这是返回网址的问题,因为虚拟应用程序名称会自动添加到地址中。我的应用程序注册中包含了此网址,但它仍然不起作用。

pobjuy32

pobjuy321#

我想在你看到上面的错误信息页面后,你可以尝试访问http://localhost或者你可以改变默认的主页url,看看用户是否已经成功登录。
我用Microsoft Identity创建了一个新的Blazor服务器应用程序,然后用tenant id, client id填充appsettings.json,并将CallbackPath默认为/signin-oidc。在AAD中,将重定向URL设置为https://localhost/signin-oidc。在本地测试时运行良好。发布到IIS后,登录不太好,因此我将

builder.Services.AddAuthorization(options =>
{
    // By default, all incoming requests will be authorized according to the default policy
    options.FallbackPolicy = options.DefaultPolicy;
});

和内容,以便我可以看到更多错误问题。

if (!app.Environment.IsDevelopment()) { }

但在完成这些步骤后,除了登录重定向回http://localhost/signin-oidc之外,一切都运行良好。请注意,我们需要在Azure AD门户中将重定向URL设置为http,因为IIS默认使用HTTP。但由于没有页面路由到signin-oidc

如果我上面说的不是问题,我想你可以创建一个自签名证书并将其绑定到默认网站,然后访问https。刚才我又试了一次,它一直显示500错误,如下图所示。然后我创建了自签名证书使用https,然后解决了500错误。

相关问题