【问题标题】:IdentityModel.OidcClient library doesn't seem to work with UWPIdentityModel.OidcClient 库似乎不适用于 UWP
【发布时间】:2018-07-03 01:08:53
【问题描述】:

我们将 ASP.NET Identity 与 IdentityServer4 一起使用。我们添加了一个与 Azure AD 一起使用的客户端。这在网页中效果很好,该部分正在工作。

我们的最终目标是 UWP 应用,因此我们找到了包含 UWP 示例的 IdentityModel.OidcClient。此示例有两个浏览器类。我们配置了 HTTPS,但 WabBrowser 类现在完全拒绝连接到该站点。如果我将配置更改为点击https://demo.identityserver.io 那么它可以工作,但所有其他配置都是相同的,所以我不确定问题可能是什么。它在弹出的浏览器中显示无法连接的错误消息。

我查看了 SystemBrowser 类,但是这个登录正常,然后浏览器窗口没有关闭,即使我们关闭它,代码也不会继续返回结果。看源码,这并不奇怪,它调用:

Launcher.LaunchUriAsync(new Uri(options.StartUrl));

仅此而已。 RedirectUri 未传入,并且似乎存在使用它的机制。所以,我们看到的行为似乎是类可以做的程度。

查看控制台 .NET Core 示例,它有一个可以工作的 SystemBrowser 类。我更新了 UWP 示例以使用 Fall Creators Update,并且能够引入编译此代码所需的 ASP.NET Core dll。它设置了一个这样的类:

public LoopbackHttpListener(int port, string path = null)
{
     path = path ?? String.Empty;
     if (path.StartsWith("/")) path = path.Substring(1);

     _url = $"http://127.0.0.1:{port}/{path}";

     _host = new WebHostBuilder()
          .UseKestrel()
          .UseUrls(_url)
          .Configure(Configure)
          .Build();
     _host.Start();
}

我可以确认它只被调用一次,但即使我硬编码一个未使用的 IP 地址,我也会收到一个错误,表明该 IP 正在使用中。

因此,在这个阶段,UWP 存在的示例适用于演示服务器,但不适用于我们的服务器(我怀疑是 HTTPS 问题,但这不是我得到的错误),并导入适用于 Core 示例的代码,也不起作用。我在这方面花了几天时间,希望能朝着正确的方向轻推。

所以,回顾一下,WabBrowser 似乎是最好的选择,但是,对于我的本地主机 IdentityServer,我得到了这个:

如果我尝试使用在其他地方工作的 .NET Core 库,它会认为某个端口正在使用中。我怀疑我需要弄清楚为什么 WabBrowser 无法连接到我的本地站点。我已经关闭了提琴手。我可以浏览到我的 https URL 并在浏览器中的https://localhost:44305/.well-known/openid-configuration 获取一个迪斯科文档。

【问题讨论】:

    标签: .net-core identityserver4 openid-connect


    【解决方案1】:

    【讨论】:

    • 我已按照这些说明操作,但随后使用外部 URL 会出现相同的错误。 OIDC 客户端甚至调用知名端点也失败了,而且似乎没有办法覆盖它正在使用的 httpclient。还有其他解决办法吗?
    【解决方案2】:

    This website 给了我修复。这是一个概要:

    移除环回隔离

    出于安全和可靠性的原因,不允许 UWP 应用程序向环回接口发送请求。虽然 Visual Studio 会自动为已调试的应用创建豁免,但此功能在这种情况下不会有帮助,因为身份验证代理始终在单独的进程中执行。

    如果您在 Windows 事件日志中看到这条(神秘的)错误消息,那么您很可能遇到了这个问题:

    AuthHost 在 URL:[...] 遇到导航错误,StatusCode:0x800C0005。

    解决此问题的一种方法是使用 Eric Lawrence 开发的 loopack 豁免实用程序。它本身包含在 Fiddler 4 中,但也可以作为独立软件下载。要允许身份验证代理与环回接口通信,请免除以 microsoft.windows.authhost 开头的应用程序并保存您的更改:

    如果一切配置正确,您现在应该会看到服务器返回的登录/同意页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 2020-04-04
      • 2023-04-06
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多