反向设计Xbox One Smartglass应用程序的API授权标头

Rei*_*ain 8 reverse-engineering xbox windows-live-id mitmproxy xbox-one

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

为此,我使用了mitmproxy来确定iOS版Xbox One Smartglass应用程序的请求.似乎对于任何需要身份验证的请求,应用程序使用"XBL3.0 x = {computed auth token}"填充"身份验证"标头字段.

我已想出的是,应用程序通过执行一个POST请求来获取接入令牌https://login.live.com/oauth20_token.srf并传递形式的编码数据,其中所述属性中的一个是用户的"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"
}
Run Code Online (Sandbox Code Playgroud)

此请求的响应包含以下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>"
}
Run Code Online (Sandbox Code Playgroud)

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

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

Cel*_*ish 0

我相信 RPS 指的是使用真实/微软帐户的联合登录。因此,RpsHeader 和 RpsTicket 是从登录到 login.live.com 的帖子中收到的信息。然而,如何根据从 live.com 接收到的数据创建该数据可能更难弄清楚,但我猜它是从 love.com 响应中获取一些数据并对其进行 base64 编码或其他内容。