2

在过去的 5 年里,情况发生了很大变化,我不确定如何让这个样本发挥作用:

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WebAccountManagement

这使用“帐户管理器”UI 窗口来显示主要是 Microsoft 帐户的列表,以从中获取访问令牌。我了解如何与窗口交互。我遇到的问题是 OAuth 端点、范围和应用程序 ID。

仅供参考,我使用的是个人Microsoft 帐户。

这是我认为使 UWP 应用程序能够使用此令牌服务的正确方法:

  1. 将你的 UWP 应用与商店关联。(这给了它一个自动进入清单的 SID。)
  2. 在https://apps.dev.microsoft.com上注册应用名称/ID 。
  3. 将步骤 2 中的应用程序 ID 从Converged applications 部分复制到示例SingleMicrosoftAccountScenario项目的AccountClientId.
  4. 运行应用程序并尝试登录。

这每次都会给我一个错误。这让我感到困惑:

  1. 示例中的默认范围是 OneDrive API 范围。我认为那已经消失了,有利于 MS Graph。
  2. 我应该使用旧的、旧的 Live SDK 应用程序 ID 吗?
  3. 默认的本机应用回调 URI 可以吗?我需要使用不同的东西吗?通过阅读文档深处的某个地方,我尝试添加 ms-appx-web://Microsoft.AAD.BrokerPlugIn/{app sid},但这也不起作用。
  4. 很多帖子都在谈论跨平台 ADAL 或 MSAL 库。我也喜欢这个。我打算将它用于 Xamarin 的东西......但对于本机 UWP,我想将非常方便的 AccountsSettingsPane 与 WebAuthenticationCoreManager 一起使用。我已经使用 WebAuthenticationBroker 添加了 Facebook 以获取令牌。

我只是被困住了,直到我弄清楚这个 Microsoft 帐户的东西。合并个人帐户和企业帐户确实使这变得复杂...

4

1 回答 1

2

这是我发现的:

  1. 对于使用 的 Microsoft 帐户WebAuthenticationCoreManager,您只有两个权限,可让您在 PC 上“查找”在 Windows 10 中注册的内置Microsoft帐户。您可以使用“消费者”或“组织”。

  2. 如果您使用“组织”权限,WebAuthenticationCoreManager将使用 v1 AAD 端点为您获取令牌......虽然这理论上可以使用 MS Graph,但我无法让它工作。 为了让它在示例中工作,您必须将添加的属性更改WebTokenRequest为如下。注意网址不同。我的范围是在应用注册网站上预设的。当您在 https://apps.dev.microsoft.com注册您的应用程序时使用聚合应用程序 ID,并且您使用普通的 Graph API 范围,如“user.read”。

    webTokenRequest.Properties.Add("resource", "https://graph.microsoft.com");
  3. 如果您使用“消费者”权限,则根本不会获得与 MS Graph 兼容的令牌。相反,您将获得一个旧的 Live API 令牌。您可以通过使用此端点获取带有令牌https://apis.live.net/v5.0/me的用户名来确认这一点。虽然我可以使用这个令牌来验证我的用户,但这个 API 已经被弃用,并将在 2018 年 11 月(下个月!)下线。因此,您似乎不能将其用于个人帐户。如果你想让它工作,你需要使用 Converged ID 号,而是使用旧的 Live API 范围“wl.basic”。

我的解决方法是根本不添加默认帐户,而是添加一个使用 MSAL 登录的自定义帐户。这很糟糕,因为这仍然需要初始登录。很遗憾,因为我们已经使用该帐户登录了 PC。似乎很愚蠢,我们需要再次输入凭据。

更新

此处的 github 存储库有一个有效的解决方案,用于WebAuthenticationCoreManager获取与 MS Graph API 一起使用的令牌。显示他们如何做到这一点的文件在这里:https ://github.com/CommunityToolkit/Graph-Controls/blob/main/CommunityToolkit.Authentication.Uwp/WindowsProvider.cs

于 2018-10-16T16:15:06.670 回答