IdentityModel.OidcClient库似乎无法与UWP

时间:2018-01-24 04:32:18

标签: .net-core identityserver4 oidc

我们正在将Identity 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问题,但这不是我得到的错误),并导入适用于核心样本,也不起作用。我花了几天时间对此表示赞赏,并希望能朝着正确的方向努力。

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

enter image description here

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

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

This website给了我解决方法。这是一个提要:

删除环回隔离

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

如果您在Windows事件日志中看到此(错误的)错误消息,则很可能会遇到此问题:

AuthHost在URL上出现导航错误,状态代码为0x800C0005,网址为[...]。

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

enter image description here

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