IdentityModel.OidcClient库似乎不适用于UWP

问题描述 投票:1回答:2

我们在IdentityServer4中使用ASP.NET Identity。我们添加了一个用于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似乎是最好的选择,但对于我的localhost IdentityServer,我得到了这个:

enter image description here

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

.net-core identityserver4 oidc
2个回答
0
投票

0
投票

This website给了我解决方案。这是一个概要:

Remove loopback isolation

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

如果您在Windows事件日志中看到此(隐秘)错误消息,那么您可能会遇到此问题:

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

修复它的一个选择是使用由Eric Lawrence开发的loopack免除工具。它本身包含在Fiddler 4中,但也可以作为独立软件下载。要允许身份验证代理与loopback接口通信,请从microsoft.windows.authhost开始免除应用程序并保存更改:

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.