OneDrive SDK UWA "AuthenticationFailure"

OneDrive SDK UWA "AuthenticationFailure"

我正在构建一个 W10 通用应用程序,我想知道谁登录了 Windows,这样我就可以将他们在我服务器上的数据与唯一标识用户的内容相关联 w/o需要单独登录。 OneDrive SDK 应该使这变得简单和容易。 所以,我用 OneDrive 注册了我的应用程序,使用 nuget 安装包,下载了示例并编写了以下代码......

var scopes = new string[] { "wl.signin", "wl.offline_access", "onedrive.readonly" };
var client = OneDriveClientExtensions.GetUniversalClient(scopes);
try {
    await client.AuthenticateAsync();
}
catch {
    blahlblahblah;
}

这不会引发异常,但是,在 AuthenticateAsync 执行后,客户端的 IsAuthenticated 属性 仍然为 false,ServiceInfo 的 UserId 为 null。 所以,我接下来尝试了这个:

var client = OneDriveClient.GetMicrosoftAccountClient(
            this.Resources["AppID"].ToString(),
            this.Resources["ReturnUri"].ToString(),
            scopes
        );

其中 AppID 和 ReturnUri 与客户端 ID 匹配,并且重定向 URL 已在应用中注册。

这实际上抛出一个 OneDrive.Sdk.Error 和 "Failed to retrieve a valid authentication token for the user."

的消息

所以,我不知道自己做错了什么。我完全不知所措了。我拉起 Fiddler 来查看来回发送的内容,但没有显示任何内容。我没有足够的信息来解决这个问题。

有人有什么想法吗?

因此,在错误修复之前,ginach 的问题解决方法似乎是解决方案。所以,总结一下....

不要使用 UniversalClient 的 IsAuthenticated 属性。相反,检查客户端的 AuthenticationProvider 的 CurrentAccountSession 以查看它是否具有值和 AccessToken。

var client = OneDriveClientExtensions.GetUniversalClient(scopes);
await client.AuthenticateAsync();
if (client.AuthenticationProvider.CurrentAccountSession != null && client.AuthenticationProvider.CurrentAccountSession.AccessToken != null) {
    blahblahblahblahblah
}

这似乎可以解决问题。