具有 Azure Active Directory 身份验证的独立 Blazor WASM .Net6 应用程序在本地工作,而不是部署到 Azure 静态应用程序服务时

Standalone Blazor WASM .Net6 Application with Azure Active Directory Authentication works locally, not when deployed to Azure Static App Service

我已经遇到这个问题好几天了,一直无法弄清楚它是什么。

在我的 Blazor WASM 独立程序中,我使用 Azure Active directory 处理身份验证并按照以下确切步骤进行设置:1

它在本地开箱即用,但在将它从 Azure DevOps 发布到 Azure 的静态 Web 应用服务后,身份验证重定向就停止工作了,在查看站点使用 Fiddler 发出的请求后,它是很明显,重定向到 Microsoft 的身份验证站点从未发生过。

有趣的是,回调的 URL 中没有身份验证错误消息(因为我通常在出现问题时收到它们)- 根本没有信息,弹出窗口 window 甚至不打开过。这是我从浏览器控制台获得的唯一 error Message。

部署到 Azure 静态应用程序就像本教程中一样工作2这里是我的 DevOps 管道 yaml,以备不时之需。

# Example Taken From https://reddit.fun/96630/devops-pipeline-unable-deploy-blazor-static-package-private
    # research documentation https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#standalone-deployment
    # Documentation of Azure Static Web App Task https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/azure-static-web-app?view=azure-devops
    
    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      buildConfiguration: 'Release'
      dotNetFramework: 'net6.0'
      dotNetVersion: '6.0.x'
    
    steps:
    - checkout: self
      submodules: true
    
    - task: UseDotNet@2
      inputs:
        version: $(dotNetVersion)
        includePreviewVersions: true
    
    - task: CmdLine@2
      inputs:
        script: "dotnet workload install wasm-tools" 
    
    - task: DotNetCoreCLI@2
      displayName: "dotnet restore"
      inputs:
        command: restore
        projects: '**/*.csproj'
    
    - task: DotNetCoreCLI@2
      displayName: "Publish Blazor App"
      inputs:
        command: publish
        publishWebProjects: true #required for publish
        arguments: '--configuration $(buildConfiguration) --framework $(dotNetFramework) --output $(Build.ArtifactStagingDirectory)'
        zipAfterPublish: false
    
    - task: DownloadPipelineArtifact@2
      displayName: "Download Artifacts"
      inputs: 
        targetPath: '$(Build.ArtifactStagingDirectory)'
    
    - bash: cd $(Build.ArtifactStagingDirectory); echo $(ls); cd 'KapaBlazorWeb'; echo $(ls); 
    
    - task: AzureStaticWebApp@0
      inputs:
        cwd: $(Build.ArtifactStagingDirectory)
        skip_app_build: true # skip build because restore of build will probably fail?!
        app_location: '[BlazorAppName]/wwwroot'
        azure_static_web_apps_api_token: '[TOKEN]]'

我的问题是,如果您遇到过类似的事情,并且您是否知道解决此问题的方法,因为我是使用 Azure 的新手并且从未使用过 Azure 的静态 Web 服务。 也许问题不在于 Blazor-App 本身,而在于 Static-App-Service?有什么我可能错过的吗?有没有办法查看有关 ASW 上发生的事情的更多信息?

编辑:更新 我还发布了默认的 Blazor Wasm AAD 项目(也是独立的),因为它是由 Visual studio 模板生成的,并且在本地它再次运行良好但是当在 Azure 的静态 Web 服务上时,重定向到 Microsoft 的身份验证页面永远不会发生,它总是转到“/authentication/login-failed”路径。

我猜测 IIS 服务器存在某种我尚未找到的配置问题。

好的,我终于找到问题了,我想把它留在这里:

在使用默认的 Blazor AAD 模板测试所有内容后,我至少得到了一个错误,结果在这个问题中得到了回答:

然后我将这三行添加到 csprj 文件中(直接在包含所有 PackageReferences 的项目组下面)

<ItemGroup>
    <TrimmerRootAssembly Include="Microsoft.Authentication.WebAssembly.Msal" />
</ItemGroup>

它现在神奇地起作用了——显然是因为这个包在发布过程中被删减了,这导致了问题的发生。

希望对以后的人有所帮助:)