如何正确使用WebAuthenticationCoreManager获取Microsoft帐户令牌?

时间:2018-10-11 06:13:29

标签: authentication oauth uwp microsoft-graph microsoft-account

在过去的五年中,事情发生了很大变化,我不确定该样本如何工作:

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 (从“融合的应用”部分复制到示例的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帐户资料之前,我一直处于困境。合并个人帐户和商业帐户确实使这一过程变得复杂了。

1 个答案:

答案 0 :(得分:1)

这就是我发现的东西:

  1. 对于使用WebAuthenticationCoreManager的Microsoft帐户,您只有两个权限,可让您在Windows 10中注册的PC上“查找”内置的 Microsoft 帐户。 “消费者”或“组织”。
  2. 如果您使用“组织”权限,WebAuthenticationCoreManager将使用v1 AAD端点为您获取令牌... 虽然理论上可以使用MS Graph,但我不能使其起作用。为了使它在示例中起作用,必须将添加的属性更改为WebTokenRequest,如下所示。请注意,URL是不同的。我的范围是在应用程序注册网站上预设的。在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。似乎很愚蠢,我们需要再次输入凭据。