OneDrive SDK UWA“AuthenticationFailure”

时间:2015-12-09 16:05:45

标签: authentication win-universal-app onedrive

我正在构建一个W10 Universal应用程序,我想知道谁登录到Windows,因此我可以将我的服务器上的数据与唯一标识用户的内容相关联,无需单独登录。 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,并显示“无法为用户检索有效身份验证令牌”的消息。

所以,我不知道我在这里做错了什么。我完全失去了。我拉起了提琴手,看看被送回去的是什么?没有出现任何东西。我没有足够的信息来解决这个问题。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

因此,在修复错误之前,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
}

这似乎可以解决问题。