authentication - 如何正确使用WebAuthenticationCoreManager获取Microsoft帐户 token ?

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

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

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

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

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

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

  1. 将您的 UWP 应用与商店关联。 (这会为其提供一个自动进入 list 的 SID。)
  2. https://apps.dev.microsoft.com 上注册应用程序名称/ID .
  3. 将步骤 2 中的应用 ID从聚合应用程序部分复制到示例的 SingleMicrosoftAccountScenario 项目,作为 AccountClientId
  4. 运行应用并尝试登录。

这每次都会给我一个错误。这是让我困惑的地方:

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

在我弄清楚 Microsoft 帐户的内容之前,我一直被困住。合并个人帐户和企业帐户确实使事情变得复杂......

最佳答案

这是我的发现:

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

  2. 如果您使用“组织”权限,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");
  3. 如果您使用“消费者”权限,您根本无法获得与 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/

相关文章:

java - 将 Cloud Endpoints API Explorer 锁定到特定 Gmail 帐户

ruby-on-rails - OAuth 安装 - 如何创建跨请求持续存在的 session ?

scala - Play Scala Oauth 提供程序错误

oauth - 强制跳过 Stripe 连接帐户申请表

c# - ContentPresenter 在 UWP 中如何工作?

c# - UWP + .appinstaller : How to detect new version and prompt user and start the upgrade of the app?

javascript - Web 抓取需要使用/Javascript 警报进行身份验证的内部站点

php - 如何保留用户登录和退出的日志?

ruby-on-rails - 设计与 devise_token_auth : How to handle authentication for both a web app and API

c++ - UWP 是否具有同步文件读/写 API?