Authentication Blazor身份验证用于多个Webassembly应用程序的托管部署

Authentication Blazor身份验证用于多个Webassembly应用程序的托管部署,authentication,blazor,blazor-webassembly,Authentication,Blazor,Blazor Webassembly,我正在尝试运行多个托管Blazor应用程序的示例 我的出发点是Microsoft提供的文档: 文档中描述的基本设置工作正常。 现在,我想添加基于blazor webassembly模板的身份验证,通过个人帐户进行身份验证 我已经运行了它的一部分,但其他部分不起作用,我甚至不确定什么是关于它的总体架构的正确方法 假设多个应用程序使用单个用户群。 我是否使用我的主机作为身份服务器(如下所示),还是所有应用程序都使用第三方主机 app.MapWhen(ctx => ctx.Request.Ho

我正在尝试运行多个托管Blazor应用程序的示例

我的出发点是Microsoft提供的文档:

文档中描述的基本设置工作正常。
现在,我想添加基于blazor webassembly模板的身份验证,通过个人帐户进行身份验证

我已经运行了它的一部分,但其他部分不起作用,我甚至不确定什么是关于它的总体架构的正确方法

假设多个应用程序使用单个用户群。 我是否使用我的主机作为身份服务器(如下所示),还是所有应用程序都使用第三方主机

app.MapWhen(ctx => ctx.Request.Host.Port == 5001 || 
    ctx.Request.Host.Equals("firstapp.com"), first =>
{
    first.Use((ctx, nxt) =>
    {
        ctx.Request.Path = "/FirstApp" + ctx.Request.Path;
        return nxt();
    });

    first.UseBlazorFrameworkFiles("/FirstApp");
    first.UseStaticFiles();
    first.UseStaticFiles("/FirstApp");
    first.UseRouting();

    first.UseIdentityServer();
    first.UseAuthentication();
    first.UseAuthorization();

    first.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
        endpoints.MapFallbackToFile("/FirstApp/{*path:nonfile}", 
            "FirstApp/index.html");
    });
});

app.MapWhen(ctx => ctx.Request.Host.Port == 5002 || 
    ctx.Request.Host.Equals("secondapp.com"), second =>
{
    ...
由于调用了openid配置,因此无法正常工作(https://localhost:5001/.well-已知/openid配置)失败, 以及对Identity Server页面的任何调用,例如。https://localhost:5001/Identity/Account/Register

这似乎是一个路由/映射问题,尽管我不确定在哪里必须进行更改。有什么想法或建议吗

我发现的另一个可能的选择是使用第三个端口,通过在mapWhen语句之后添加以下内容,将其与客户端分开运行

    app.UseStaticFiles();
    app.UseRouting();
    app.UseIdentityServer();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllers();
    });

这将要求客户端不使用自己的主机进行身份验证,而是使用第三方进行身份验证,这将使事情变得更加复杂。但是,如果这是唯一或唯一的清洁解决方案,我将不得不处理它。

有许多事情需要改变:

选中此项: