Microsoft が Xbox Live ユーザーのプロフィール ページをログイン ウォールの背後に配置することを決めて以来、私は Xbox Live ユーザーがオンラインかどうかを判断する別の方法を見つける必要がありました。
これを行うために、私は mitmproxy を使用して、iOS 用の Xbox One Smartglass アプリによって行われている要求を把握しました。認証が必要なリクエストの場合、アプリは「Authentication」ヘッダー フィールドに「XBL3.0 x={computed auth token}」を入力するようです。
https://login.live.com/oauth20_token.srfへの POST リクエストを実行することで、アプリがアクセス トークンを取得し、ユーザーの "refresh_token" であるプロパティの 1 つであるフォーム エンコードされたデータを渡すことがわかりました。この更新トークンは、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=」認証ヘッダーから認証トークンが欠落しているように見えます。
問題は、Microsoft の Web スタックにまったく詳しくないことです。何時間も検索しても、「RpsHeader」と「RpsTicket」の値がどこから来たのかわかりません。