在通用Windows应用中从Windows Live SDK接收刷新令牌

本文关键字:Windows SDK Live 刷新 令牌 应用 | 更新日期: 2023-09-27 18:15:20

我正在开发一个通用的windows应用程序(windows 10),其中我有一个"双层"应用程序:在物联网设备(例如树莓派2)它只是显示内容,但在所有其他设备(PC,笔记本电脑,智能手机等)你有一个像控制器显示数据的东西。

我想实现的功能之一是控制器部分的Windows Live Login以获取显示物联网部分的日历信息。为此,我让用户有机会登录Windows Live,如下所示:

LiveAuthClient auth = new LiveAuthClient();
LiveLoginResult loginResult = await auth.LoginAsync(new string[] { "wl.signin", "wl.calendars", "wl.offline_access" });
if (loginResult.Status == LiveConnectSessionStatus.Connected)
{
    //Save the AccessToken from loginResult.Session.AccessToken
    TokenHandler.Save(loginResult.Session.AccessToken); //AccessToken is quite accessable right here
    //But as far as I know I should save the RefreshToken, but the Session has no field for it
}

所以我的问题是,我没有从LiveConnectSession中得到一个字段,其中RefreshToken可以存储,但是我读的所有文章都在告诉我,我只需要添加wl。offline_access到接收RefreshToken的作用域。

我不是很熟悉OAuth2.0和sdk/api是建立在OAuth,所以有人知道什么,我做错了什么或者我如何处理它?

我真的很感谢所有善意和有帮助的答案!

PS:我使用的是Live SDK 5.6而不是新的OneDrive API,因为它无法访问日历信息

在通用Windows应用中从Windows Live SDK接收刷新令牌

wl.offline_access

在这种情况下,它讨论的是用户授权,并允许应用程序在用户不存在时(当用户离线时,而不是计算机/设备)使用用户授权。
这并不意味着应用程序会在系统离线时登录用户,而是会请求用户允许应用程序在用户不存在时工作。
甚至在我早期的一个项目中,我也使用Live SDK来获取用户数据,但对于日历,我不得不使用Office365。现在你甚至可以使用Outlook API虽然我们确实使用loginResult.Session.AccessToken获得访问令牌,但我不认为WinRT应用程序生成了一个refreshToken。