8

由于微软出于某种愚蠢的原因决定将 Xbox Live 用户的个人资料页面放在登录墙后面,我不得不寻找其他方法来确定 Xbox Live 用户是否在线。

为此,我使用了 mitmproxy 来找出适用于 iOS 的 Xbox One Smartglass 应用程序发出的请求。似乎对于任何需要身份验证的请求,应用程序都会使用“XBL3.0 x={computed auth token}”填充“身份验证”标头字段。

我发现该应用程序通过向https://login.live.com/oauth20_token.srf发出 POST 请求来获取访问令牌,并传入表单编码数据,其中一个属性是用户的“refresh_token”。您可以通过简单地使用 mitmproxy 查看任何这些请求来获取此刷新令牌。

然后,该应用程序继续向https://user.auth.xboxlive.com/user/authenticate发出 POST 请求,传入我无法确定其来源的各种信息。以下是此请求的示例 JSON 有效负载:

{
    "Properties": {
        "AuthMethod": "RPS", 
        "RpsHeader": "<data removed for safety>", 
        "RpsTicket": "<data removed for safety>", 
        "SiteName": "user.auth.xboxlive.com"
    }, 
    "RelyingParty": "http://auth.xboxlive.com", 
    "TokenType": "JWT"
}

此请求的响应包含以下 JSON:

{
    "DisplayClaims": {
        "xui": [
            {
                "uhs": "<data removed for safety>"
            }
        ]
    }, 
    "IssueInstant": "2014-08-02T23:44:56.5868148Z", 
    "NotAfter": "2014-08-16T23:44:56.5868148Z", 
    "Token": "<data removed for safety>"
}

连接在一起的“uhs”和“token”的内容似乎是“XBL3.0 x=”授权标头中缺少的身份验证令牌。

问题是我对微软的网络堆栈完全不熟悉,经过数小时的搜索,我无法弄清楚“RpsHeader”和“RpsTicket”的值来自哪里。

4

2 回答 2

0

您实际上是在向 https://login.live.com/oauth20_authorize.srf 发送一个 GET 请求,然后立即向https://login.live.com/ppsecure/post.srf发送一个 POST请求。如果您查看对该 POST 请求的响应,您会在 Location 字段中看到一个名为 access_token 的子字符串,这就是您的 RpsTicket。

我在我的任何请求中都没有看到 RpsHeader,所以我对此一无所知。

于 2014-10-31T04:48:05.667 回答
0

我相信 RPS 是指使用 live/microsoft 帐户的联合登录。所以 RpsHeader 和 RpsTicket 是从登录到 login.live.com 的帖子中收到的信息。然而,如何从 live.com 接收到的数据创建数据可能更难弄清楚,但我猜它是从 love.com 响应中获取一些数据,然后 base64 对其进行编码或其他东西。

于 2014-08-27T17:56:16.890 回答