【问题标题】:Blazor WASM Hosted on Azure 401 Unauthorized - Issuer Invalid在 Azure 401 上托管的 Blazor WASM 未经授权 - 发行者无效
【发布时间】:2022-06-22 04:18:32
【问题描述】:

我有一个在 AZURE 上托管的 Blazor WASM 托管解决方案。我的网站在 SSL 上运行并拥有 3 个证书。一种用于 HTTPS://siteName.com,一种用于 HTTPS://www.sitename.com,另一种用于 Microsoft 文档推荐的 IdentityServerSigning。

我可以毫无问题地登录应用程序,但是,我收到 401 Unauthorized 错误,错误为 Invalid_Token - 对受限端点进行 API 调用时,发行者 https://www.siteName.com 无效

现在,如果我导航到 Azure 域名 https://siteName.azurewebsites.net,我不会收到 401 Unauthorized。

有人可以指出正确的方向来解决这个问题,www.sitename.com、sitename.com 和 sitename.azurewebsite.net 中的任何一个都可以在没有 401 未经授权的情况下访问?

【问题讨论】:

    标签: azure asp.net-web-api blazor


    【解决方案1】:

    我遇到了同样的问题。它对我来说在本地工作,但是当我将代码部署到 Azure 时出现 401 错误。不知道如何修复它,并且提供的解决方案没有提供任何新信息。

    【讨论】:

      【解决方案2】:
      1. 当用户想要访问客户端上受保护的(授权属性注释的)页面时,必须先登录或注册。
      2. 要注册,用户应该被引导到一个帐户控制器,在那里您应该创建一个新用户并将其添加到数据库中。您的帐户控制器还应生成 Jwt 令牌,该令牌应发送到客户端应用并保存在本地存储中。
      3. 现在,只要用户尝试通过您的 Web Api 端点访问受保护的资源,就应该从本地存储中检索 Jwt 令牌并将其添加到请求标头中。如果您这样做,未经授权的答案将会过时。
      4. 自定义 AuthenticationStateProvider 是管理在本地存储中存储 Jwt 令牌并为出站 HTTP 请求调用检索它的好地方

      这里有一些代码可以帮助你理解你应该做什么:

      @code {
          userDetails[] udetails;
      
          protected override async Task OnInitializedAsync()
          {
              var atoken = await TokenProvider.GetTokenAsync();
              udetails = await Http.GetJsonAsync<userDetails[]>(
                  "api/userDetails",
                  new AuthenticationHeaderValue("Bearer", atoken));
          }
      }
      

      TokenProvider 是一个自定义的 AuthenticationStateProvider,它实现了一个 GetTokenAsync 方法,该方法提供了 Jwt 令牌(通过从本地存储读取它并将其发送到调用者代码)。

      参考资料:
      Blazor WebAssembly 401 Unauthorized even when I am authorized
      .net 5 hosted blazor app gets 401 error

      【讨论】:

      • 这根本不能回答我的问题。我完全了解如何在应用程序中设置授权和身份验证。该问题与生成令牌的源 URL 有关
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2012-04-29
      • 2020-06-21
      • 2023-03-20
      • 2014-04-18
      • 2020-04-10
      • 1970-01-01
      相关资源
      最近更新 更多