【发布时间】:2020-04-27 04:19:44
【问题描述】:
我们正在 .NET Core 3.1 上使用 WPF 创建一个桌面应用程序。
我正在尝试使用 Azure AD Authenticaton 连接到 Web api,例如 this guide。但是,示例项目(可以正常工作)是用 .NET Framework 上的 WPF 编写的。
有一个客户端部分和一个服务器(web api)部分。由于客户端是桌面应用程序,您应该使用 (Azure-->AD--> app registrations... ) 注册 api-part,回复 url 为“https://login.microsoftonline.com/common/oauth2/nativeclient”
我用
初始化我的 PublicClientApplicationBuildervar app = PublicClientApplicationBuilder
.Create(ClientIdPorterApplication)
.WithAuthority(authority)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
并且在运行 app.AcquireTokenInteractive(...) 时收到错误消息:
仅支持环回重定向 uri,但 https://login.microsoftonline.com/common/oauth2/nativeclient 是 成立。期间配置http://localhost 或http://localhost:port 应用注册以及创建 PublicClientApplication 时 目的。详情见https://aka.ms/msal-net-os-browser
(此地址在示例中很好用,但同样,它写在 .NET FW 上)
所以,为了好玩,我将 replyUrl(在上面的初始化和 Azure 门户应用注册中)更改为“http://localhost:1234”。用户在网络浏览器中获得“选择帐户”对话框,在选择帐户 myname@mycompany.com 后,将显示以下消息:
身份验证完成。您可以返回应用程序。随意 关闭此浏览器选项卡。
是的!对吧?...不完全是。在代码中,我仍然收到带有错误消息的异常:
{“配置问题阻止身份验证 - 检查错误 来自服务器的消息以获取详细信息。您可以修改配置 在应用程序注册门户中。看 https://aka.ms/msal-net-invalid-client 了解详情。原来的 异常:AADSTS7000218:请求正文必须包含以下内容 参数:“client_assertion”或“client_secret”。\r\n跟踪 ID: 7b0f6384-64eb-422c-a996-cadaa52f1f00\r\n相关 ID: 0c579b5b-e706-4625-96da-fbf03e5a21f9\r\n时间戳:2020-04-23 12:14:59Z"}
有什么线索吗?我在谷歌搜索的狂热中读到,这在 .net core-scenario 上的 WPF 上是不可能的。我确定必须是一个解决方案
编辑: 在我的最终浏览器窗口中(带有消息“身份验证完成...”,url-window 中的 url 有一个 qstring 参数 code=
【问题讨论】:
-
您能否分享您在 AAD 中为此应用配置的所有回复网址(及其平台)?
-
这是一个桌面应用程序,所以我使用的唯一回复网址在我原来的问题中。您是指它们在清单文件中的外观吗?我看不到如何响应桌面应用程序上的任何回调。只是为了好玩,我还在启动时在端口上启动了一个 TcpListener,但得到一个“文件已在使用中”-错误
-
我相信你自己的答案是正确的。我只是想确保您将平台设置为桌面而不是 Web。即使您的回复 url 是 http,但在您的情况下,平台必须是桌面
标签: oauth-2.0 azure-active-directory msal