标签: live-connect-sdk

Metro App - 如何检测是否使用Live ID或本地帐户登录

我正在Live Connect SDK(http://msdn.microsoft.com/en-us/live/default)上构建Metro C#SkyDrive API - 在Windows 8中,用户可以选择登录到Windows 8计算机使用LOCAL帐户或LIVE帐户.

使用Live Connect SDK时,如果我打电话

// assume wlscopes is properly set

LiveAuthClient liveAuthClient = new LiveAuthClient();
LiveLoginResult loginResult = await liveAuthClient.LoginAsync(wlscopes);

// do some stuff on skydrive

liveAuthClient.Logout();   // <-- issue only with live account, not local
Run Code Online (Sandbox Code Playgroud)

当使用LOCAL帐户时,它会让我退出(很棒)

当我在使用LIVE帐户时调用相同的代码时,我得到一个无法处理的异常 - 我甚至无法在此错误周围添加try {} catch {}.

例外:

Cannot sign out from the application since the user account is connected. (Exception from HRESULT: 0x8086000E)
Run Code Online (Sandbox Code Playgroud)

显然,由于在Live帐户下登录的用户无法注销,我的api需要检测当前用户是否正在使用真实帐户,因此我可以阻止调用logout()方法.

所以....我的问题是,我如何知道用户在Windows 8中使用哪种帐户类型?

c# liveconnect microsoft-metro windows-8 live-connect-sdk

7
推荐指数
1
解决办法
3351
查看次数

触发OnlineIdConnectedStateChange后,检查用户是否已登录

我正在使用Windows 8.1 Metro应用程序.该应用程序为使用其Live帐户登录Windows的用户提供个性化体验.

如Windows中所提供的,任何用户都可以通过PC设置 - >帐户将其真实帐户连接/断开连接到PC.我的要求是在此事件中得到通知,即,每当用户将其真实账户连接/断开连接到PC时.现在,根据MSDN页面(http://msdn.microsoft.com/en-us/library/windows/apps/hh977056.aspx),此事件将触发OnlineIdConnectedStateChange.我能够在应用程序中实现一个监听触发器的后台任务,它工作得很好.每次在连接的Live帐户中发生更改时,都会触发事件侦听器.但是,如果用户使用某个真实帐户登录或从已连接的帐户注销,我无法确定这一事实.

我尝试使用Windows.Security.Authentication.OnlineId.OnlineIdAuthenticator(Metro App - 如何检测是否使用Live ID或本地帐户登录),但如果没有用户登录则会触发身份验证流程.这不是我想要的.我只是想知道有人登录或不登录的事实.我不想触发Auth流程.

在后台任务中触发OnlineIdConnectedStateChange事件时,有没有办法确定用户的登录/注销状态?

谢谢你的帮助.

c# live-connect-sdk windows-8.1

7
推荐指数
1
解决办法
814
查看次数

OneDrive上传/下载到指定目录

我正在尝试使用Live SDK(v5.6)在我的Windows Phone 8.1 Silverlight应用程序中包含OneDrive的备份/恢复.我可以读/写标准的"me/skydrive"目录,但我正在寻找一种上传/下载到指定目录的方法.我可以创建文件夹,如果它不存在没问题.

我一直在尝试下面没有运气.

var res = await _client.UploadAsync("me/skydrive/mydir", fileName, isoStoreFileStream, OverwriteOption.Overwrite);
Run Code Online (Sandbox Code Playgroud)

我也试过获取目录ID并传入它.

var res = await _client.UploadAsync("me/skydrive/" + folderId, fileName, isoStoreFileStream, OverwriteOption.Overwrite);
Run Code Online (Sandbox Code Playgroud)

相同的错误..我收到'mydir'或者不支持id ...

"{request_url_invalid:Microsoft.Live.LiveConnectException:URL包含路径'mydir',不受支持."

有什么建议?如果你建议上传同步的答案,你还可以包括我如何从指定的目录下载我的文件?谢谢!

c# live-connect-sdk live-sdk onedrive

3
推荐指数
1
解决办法
6913
查看次数

Live Connect OAuth2是否存在严重的重放攻击问题?为什么授权码可以多次使用?

首先感谢您的宝贵时间。我对Live Connect的OAuth2 API表示严重关注。

我遵循此步骤,并使用DotNetOpenAuth为我们的联合身份和访问管理系统实现/集成LiveId身份验证/授权。

http://msdn.microsoft.com/zh-CN/library/live/hh243647.aspx#authcodegrant

在很长一段时间内,一切正常。但是现在在解决LiveId登录模块的重放攻击问题时遇到了严重的麻烦。让我们看一下以上文章中的授权代码授予流程。

“ * 4。用户代理使用重定向URI调用客户端,该重定向URI包括授权码和客户端提供的任何本地状态。例如:... Callback.htm?code = AUTHORIZATION_CODE。5.客户端请求来自授权服务器令牌端点的访问令牌,使用其客户端凭据进行身份验证,并包括在上一步中接收到的授权代码。客户端包括用于获取验证授权代码的重定向URI。

在步骤4之后,Live Connect OAuth2服务器将使用授权代码和状态返回我的回调端点,如下所示:

https://ssss.myapp.com:443/liveid/consume.idp?code=406dd558-0cda-50cc-bd37-d964ec29fbb3&state=uvygsnd3gba0jwi315kdyccs

问题是,授权代码可以多次使用。因此,这会导致严重的重放攻击问题,例如以下情况:

  1. 用户A登录到我的应用程序时,选择LiveId进行登录,然后将他重定向到LiveId登录页面。然后,他登录,Live Connect OAuth2服务器使用代码= xxx&state = yyy返回到回调端点。用户A然后使用此授权代码获取访问令牌。

  2. 用户B登录到我的应用程序时,选择LiveId进行登录,然后登录LiveId的登录页面。Live Connect OAuth2服务器现在返回,代码为= kkk&state = ggg

如果这一次,请使用Webscarab之类的工具来捕获响应/请求,然后将OAuth2服务器的返回值更改为code = xxx&state = ggg(旧的授权码是提供给用户A,而不是B)。然后,使用此重播授权代码请求访问令牌的过程很顺利。你猜怎么着?我再次收到了A的访问令牌,该令牌是在A之前提供给用户A的。最终,用户B可以以用户A的身份登录我的应用程序。

请注意,对Google OAuth2服务器应用与上述相同的重播攻击,我从服务器收到错误的请求错误,Google OAuth2授权代码永远不能使用超过一次。而且代码流或完全相同,Google登录名和LiveId登录名的实现完全相同。

我使用DotNetOpenAuth.OAuth2.WebServerClient为Google和LiveId实施OAuth2身份验证流程。同样,代码完全相同,但是当重复使用授权代码时,Google OAuth2服务器返回了“错误请求”,但是LiveId返回了先前用户的旧访问令牌。

这是一个严重的安全问题。希望你们对此有一些想法。或者希望我在某些方面是错误的。请指出。

非常感谢Phuc Le。

windows-live-id dotnetopenauth liveconnect oauth-2.0 live-connect-sdk

1
推荐指数
1
解决办法
1528
查看次数

为什么Live Connect SignInButton失败并且redirect_uri无效?

我正在尝试Windows Phone应用和实时连接.我的主页上有这个控件:

xmlns:live="clr-namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"

...

<live:SignInButton ClientId="[my client id, which I registered earlier today]"
                   Scopes="wl.signin wl.basic"
                   Branding="Skydrive"
                   TextType="SignIn"
                   SessionChanged="SignInButton_SessionChanged" />
Run Code Online (Sandbox Code Playgroud)

这是处理程序SessionChanged:

private async void SignInButton_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
{
    if (e.Error != null)
        System.Diagnostics.Debugger.Break();

    ...
}
Run Code Online (Sandbox Code Playgroud)

我使用Windows Phone模拟器调试我的应用程序.单击"登录"按钮时,出现此异常:

输入参数'redirect_uri'的提供值无效.客户端应用程序必须标记为"mobile",或者值必须是与注册的重定向URI匹配的绝对URL.

我没有明确指定redirect_uri任何地方.为什么登录因无效而失败redirect_uri

.net c# liveconnect live-connect-sdk windows-phone-8

1
推荐指数
1
解决办法
1348
查看次数