【问题标题】:ASP.NET Core 5 MVC and OpenID Connect - error when hosting on remote Windows serverASP.NET Core 5 MVC 和 OpenID Connect - 在远程 Windows 服务器上托管时出错
【发布时间】: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


【解决方案1】:

原来这是由于我的 IIS 中的配置继承造成的。

我在 IIS 站点的“根”中有第一个 ASP.NET Core 应用程序 - 当然有一个 web.config,看起来像这样:

<system.webServer>
    <handlers>
        <add name="aspNetCore" path="*" verb="*" 
             modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\MyRootApp.dll" 
                stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>

然后,在我的MyApp IIS 应用程序中,位于“默认站点”的根“下方”,我有第二个 ASP.NET Core 应用程序,它当然还有一个 web.config,它定义了另一个 @987654325 @ - 这引起了混乱。

大量 搜索后,我在互联网上的某处找到了一个提供解决方案的帖子 - 修改 web.config 以将设置仅应用于应用程序自己的目录 - 而不是将其继承到孩子们;通过使用&lt;location&gt; XML 元素,如下所示:

<location path="." inheritInChildApplications="false">
    <system.webServer>
        <handlers>
            <add name="aspNetCore" path="*" verb="*" 
                 modules="AspNetCoreModuleV2" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="dotnet" arguments=".\MyRootApp.dll" 
                    stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
</location>

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2021-05-12
    • 2011-08-27
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多