【发布时间】:2021-09-01 13:59:31
【问题描述】:
让我的 ASP.NET Core 5 MVC Web 应用程序在远程 Windows 2019 服务器上运行时遇到了麻烦。
我使用“MS Identity”身份验证方案创建了一个示例测试应用程序,它使用 OpenID Connect 针对我们公司的 Azure AD 对用户进行身份验证。
这是我的Startup.cs 澄清:
public void ConfigureServices(IServiceCollection services)
{
List<string> initialScopes = new List<string>();
string scope = Configuration.GetValue<string>("MyAPI:Scopes");
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddInMemoryTokenCaches();
services.AddAuthorization(options =>
{
// By default, all incoming requests will be authorized according to the default policy
options.FallbackPolicy = options.DefaultPolicy;
});
services.AddRazorPages()
.AddMvcOptions(options => { })
.AddMicrosoftIdentityUI();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
});
}
我在我们公司的 Azure 租户中注册了一个应用程序(所有相关信息都在 appsettings.json 中,在 AzureAd 部分中),在本地,这工作得很好 - 当我点击 http://localhost:1234/ URL ,Azure AD 提示我输入凭据,在我提供凭据后,我登录并正确设置了我的声明 - 一切似乎都很好(并且 http://localhost:1234/signin-oidc 已设置为 Azure AD 应用程序注册中的回调路径)。
现在,我通过从 Visual Studio 发布到文件夹,并将所有这些文件手动复制到远程 Win2019 服务器,将其部署到 Windows 2019 服务器 - 老派。我设置了一个 IIS 应用程序,指向该目录 - 一切似乎都很好。
但是,当我尝试访问远程 URL https://myserver.mycompany.org/myapp 时,我收到 OpenID Connect 回调路径 - https://myserver.mycompany.org/myapp/signin-oidc 的错误 http 403 - 禁止。
是的 - 我 在我的 Azure 应用注册中将此 URL 设置为“回调” URL - 但我仍然得到一个 http 403 禁止。任何想法为什么?我是否需要在远程 IIS 配置中执行额外步骤以允许 MS Identity 子系统对 ./signin-oidc 路径进行 OIDC 回调?
(PS:当我尝试为 OpenId Connect 和 ASP.NET Core 部署任何 Microsoft 示例应用程序时,也会发生同样的错误 - 可在 Github 上找到:https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2。因为我认为 MS 不会发布实际上不起作用的代码,我确定在远程服务器上的 IIS 中部署/设置我的应用程序时,我一定错过了一两步)
【问题讨论】:
-
应用程序池的标识是什么? 403的子状态码是什么?
-
@BruceZhang:我没有看到 http403 的任何子状态代码 - 只是 http 403 - 禁止 - 仅此而已。应用程序池使用标准的“AppPoolIdentity”——没什么特别的
-
403表示没有权限,授权失败,但是认证成功。那么你使用身份验证了吗?使用什么身份进行身份验证?尝试将应用程序的身份更改为管理员。
标签: c# iis asp.net-core-mvc openid-connect