gpt4 book ai didi

oauth-2.0 - 从 .NET Core 上的 WPF 桌面应用程序对 Azure AD (auth 2.0) WebAPI 进行身份验证

转载 作者:行者123 更新时间:2023-12-04 17:29:03 26 4
gpt4 key购买 nike

我们正在 .NET Core 3.1 上使用 WPF 创建桌面应用程序。

我正在尝试使用 Azure AD 身份验证连接到 Web API,例如遵循 this guide .但是,示例项目(工作正常)是在 .NET Framework 上用 WPF 编写的。

有一个客户端部分和一个服务器(web api)部分。由于客户端是桌面应用程序,您应该使用 (Azure-->AD--> app registrations...) 注册 api 部分,回复 url 为“https://login.microsoftonline.com/common/oauth2/nativeclient

我用

初始化我的 PublicClientApplicationBuilder
var app = PublicClientApplicationBuilder
.Create(ClientIdPorterApplication)
.WithAuthority(authority)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();

并且在运行 app.AcquireTokenInteractive(...) 时得到错误信息:

Only loopback redirect uri is supported, but https://login.microsoftonline.com/common/oauth2/nativeclient was found. Configure http://localhost or http://localhost:port both during app registration and when you create the PublicClientApplication object. See https://aka.ms/msal-net-os-browser for details

(此地址在示例中使用效果很好,但同样,它是在 .NET FW 上编写的)

所以,为了好玩,我将 replyUrl(在上面的初始化和 Azure 门户应用程序注册中)更改为“http://localhost:1234”。用户在 Web 浏览器中获得“选择帐户”对话框,在选择帐户 myname@mycompany.com 后,将显示以下消息:

Authentication complete. You can return to the application. Feel free to close this browser tab.

是的!对吧?...不完全是。在代码中,我仍然得到带有错误消息的异常:

{"A configuration issue is preventing authentication - check the error message from the server for details.You can modify the configuration in the application registration portal. See https://aka.ms/msal-net-invalid-client for details. Original exception: AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'.\r\nTrace ID: 7b0f6384-64eb-422c-a996-cadaa52f1f00\r\nCorrelation ID: 0c579b5b-e706-4625-96da-fbf03e5a21f9\r\nTimestamp: 2020-04-23 12:14:59Z"}

有什么线索吗?我在谷歌搜索的某个地方读到,这在 .net 核心场景的 WPF 上是不可能的。我确定这一定是一个解决方案

编辑:在我的最终浏览器窗口中(显示消息“身份验证完成...”,url-window 中的 url 有一个 qstring param code= enter image description here

最佳答案

明天只能接受自己的答案,如果忘记了,这就是答案

这对我有用:只是为了好玩设置是要走的路:

var app = PublicClientApplicationBuilder
.Create(ClientIdPorterApplication)
.WithAuthority(authority)
.WithRedirectUri("http://localhost:1234")
.Build();

(可以是任何端口,但不能被任何其他端口使用)。...

result = await app.AcquireTokenInteractive(scopes) 
.WithAuthority(authority)
.ExecuteAsync()
.ConfigureAwait(false);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

msal会监听这个端口,用一种神奇的方式从浏览器中获取token

在 azure 中有两个应用程序注册,客户端(我的桌面应用程序)和服务器(web api)。

  • 服务器:按照原问题中的指南进行操作即可
  • 客户(加上指南):对于 (Azure Portal->AAD-->App reg-page->Authentication:
    • “将应用程序视为公共(public)客户端。”应该是"is"
    • [添加平台] ->移动端和桌面端,在这里添加你的回复地址(我的是 http://localhost:1234以上)

关于oauth-2.0 - 从 .NET Core 上的 WPF 桌面应用程序对 Azure AD (auth 2.0) WebAPI 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com