逆向工程 – 逆向工程Xbox One Smartglass应用程序的API授权标头

由于微软决定将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”的价值来自哪里.

我相信RPS是指带有live / microsoft帐户的联合登录.所以RpsHeader和RpsTicket是从post.live.com发布的信息.然而,从live.com收到的数据如何创建这些数据可能更难以弄清楚,但我猜它会从love.com响应中获取一些数据并对其进行base64编码.
相关文章
相关标签/搜索