过去 5 年里情况发生了很大变化,我不确定如何让这个示例发挥作用:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WebAccountManagement
这使用“帐户管理器”UI 窗口来显示主要是 Microsoft 帐户的列表,以便从中获取访问 token 。我了解如何与窗口交互。我遇到的问题是 OAuth 端点、范围和应用程序 ID。
仅供引用,我使用的是个人 Microsoft 帐户。
这是我认为使 UWP 应用能够使用此 token 服务的正确方法:
- 将您的 UWP 应用与商店关联。 (这会为其提供一个自动进入 list 的 SID。)
- 在 https://apps.dev.microsoft.com 上注册应用程序名称/ID .
- 将步骤 2 中的应用 ID从聚合应用程序部分复制到示例的
SingleMicrosoftAccountScenario
项目,作为AccountClientId
。 - 运行应用并尝试登录。
这每次都会给我一个错误。这是让我困惑的地方:
- 示例中的默认范围是 OneDrive API 范围。我认为这种情况已经消失,取而代之的是 MS Graph。
- 我应该使用旧的 Live SDK 应用程序 ID 吗?
- 默认的 native 应用回调 URI 可以吗?我需要使用不同的东西吗?通过阅读文档的深处,我尝试添加 ms-appx-web://Microsoft.AAD.BrokerPlugIn/{app sid},但这也不起作用。
- 很多帖子都在谈论跨平台 ADAL 或 MSAL 库。我也喜欢这个。我将把它用于 Xamarin 的东西...但对于 native UWP,我想将非常方便的 AccountsSettingsPane 与 WebAuthenticationCoreManager 一起使用。我已经使用 WebAuthenticationBroker 添加了 Facebook 以获取 token 。
在我弄清楚 Microsoft 帐户的内容之前,我一直被困住。合并个人帐户和企业帐户确实使事情变得复杂......
最佳答案
这是我的发现:
对于使用
WebAuthenticationCoreManager
的 Microsoft 帐户,您只有两个权限,可让您在 PC 上“查找”在以下位置注册的内置 Microsoft 帐户: Windows 10。您可以使用“消费者”或“组织”。如果您使用“组织”权限,
WebAuthenticationCoreManager
将使用 v1 AAD 端点为您获取 token ...虽然理论上可以使用 MS Graph,但我无法使其工作。为了使其在示例中工作,您必须将添加的属性更改为WebTokenRequest
,如下所示。请注意,URL 不同。我的范围是在应用程序注册网站上预设的。当您在 https://apps.dev.microsoft.com 注册您的应用程序时,您可以使用聚合应用程序 ID并且您使用普通的图形 API 范围,例如“user.read”。webTokenRequest.Properties.Add("resource", "https://graph.microsoft.com");
如果您使用“消费者”权限,您根本无法获得与 MS Graph 兼容的 token 。相反,您将获得旧的 Live API token 。您可以通过使用此端点获取带有 token https://apis.live.net/v5.0/me 的用户名来确认这一点。 。虽然我可以使用此 token 来验证我的用户身份,但此 API 已被弃用,并将于 2018 年 11 月(下个月!)离线。所以个人账户好像不能用。如果您想使其正常工作,则需要使用聚合 ID 号,而不是使用旧的 Live API 范围“wl.basic”。
我的解决方法是根本不添加默认帐户,而是添加使用 MSAL 登录的自定义帐户。这很糟糕,因为这仍然需要初始登录。遗憾的是,我们已经使用该帐户登录了电脑。看起来很愚蠢,我们需要再次输入凭据。
更新
此处的 github 存储库提供了一个可行的解决方案,可使用 WebAuthenticationCoreManager
获取与 MS Graph API 配合使用的 token 。显示他们如何执行此操作的文件位于:https://github.com/CommunityToolkit/Graph-Controls/blob/main/CommunityToolkit.Authentication.Uwp/WindowsProvider.cs
关于authentication - 如何正确使用WebAuthenticationCoreManager获取Microsoft帐户 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52753385/