Xbox Live sts auth working
This commit is contained in:
parent
b6f54f0687
commit
16ad6e7427
72
main.go
72
main.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -29,6 +30,44 @@ type authenticationResp struct {
|
|||||||
Error_description string
|
Error_description string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type xboxAuthProperties struct {
|
||||||
|
AuthMethod string
|
||||||
|
SiteName string
|
||||||
|
RpsTicket string
|
||||||
|
}
|
||||||
|
|
||||||
|
type xboxAuthRequest struct {
|
||||||
|
Properties xboxAuthProperties
|
||||||
|
RelyingParty string
|
||||||
|
TokenType string
|
||||||
|
}
|
||||||
|
|
||||||
|
type xboxDisplayClaim struct {
|
||||||
|
Uhs string
|
||||||
|
}
|
||||||
|
|
||||||
|
type xboxDisplayClaims struct {
|
||||||
|
Xui []xboxDisplayClaim
|
||||||
|
}
|
||||||
|
|
||||||
|
type xboxAuthResponse struct {
|
||||||
|
IssueInstant time.Time
|
||||||
|
NotAfter time.Time
|
||||||
|
Token string
|
||||||
|
DisplayClaims xboxDisplayClaims
|
||||||
|
}
|
||||||
|
|
||||||
|
type XSTSProperties struct {
|
||||||
|
SandboxId string
|
||||||
|
UserTokens []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type XSTSRequest struct {
|
||||||
|
Properties XSTSProperties
|
||||||
|
RelyingParty string
|
||||||
|
TokenType string
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
resp, err := http.PostForm("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode", url.Values{
|
resp, err := http.PostForm("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode", url.Values{
|
||||||
@ -68,13 +107,42 @@ func main() {
|
|||||||
authResp := authenticationResp{}
|
authResp := authenticationResp{}
|
||||||
json.Unmarshal(data, &authResp)
|
json.Unmarshal(data, &authResp)
|
||||||
if authResp.Error == "" {
|
if authResp.Error == "" {
|
||||||
fmt.Printf("Authenticated!")
|
fmt.Printf("Authenticated!\n")
|
||||||
authentication = authResp
|
authentication = authResp
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
fmt.Printf("Auth Response: %+v\n", authentication)
|
req, _ := json.Marshal(xboxAuthRequest{Properties: xboxAuthProperties{AuthMethod: "RPS", SiteName: "user.auth.xboxlive.com", RpsTicket: "d=" + authentication.Access_token}, RelyingParty: "http://auth.xboxlive.com", TokenType: "JWT"})
|
||||||
|
client := http.Client{}
|
||||||
|
httpReq, _ := http.NewRequest("POST", "https://user.auth.xboxlive.com/user/authenticate", bytes.NewBuffer(req))
|
||||||
|
httpReq.Header.Add("x-xbl-contract-version", "1")
|
||||||
|
httpReq.Header.Add("Content-Type", "application/json")
|
||||||
|
httpReq.Header.Add("Accept", "application/json")
|
||||||
|
httpResp, err := client.Do(httpReq)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("XboxLive Error: %s\n", err)
|
||||||
|
}
|
||||||
|
defer httpResp.Body.Close()
|
||||||
|
if httpResp.StatusCode != 200 {
|
||||||
|
fmt.Printf("XboxLive Error: %s\n", httpResp.Status)
|
||||||
|
}
|
||||||
|
d, _ := io.ReadAll(httpResp.Body)
|
||||||
|
xboxAPI := xboxAuthResponse{}
|
||||||
|
json.Unmarshal(d, &xboxAPI)
|
||||||
|
xstsData, _ := json.Marshal(XSTSRequest{Properties: XSTSProperties{SandboxId: "RETAIL", UserTokens: []string{xboxAPI.Token}}, RelyingParty: "http://xboxlive.com", TokenType: "JWT"})
|
||||||
|
httpXstsReq, _ := http.NewRequest("POST", "https://xsts.auth.xboxlive.com/xsts/authorize", bytes.NewBuffer(xstsData))
|
||||||
|
httpXstsReq.Header.Add("Content-Type", "application/json")
|
||||||
|
httpResp, err = client.Do(httpXstsReq)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("XboxLive STS error: %s\n", err)
|
||||||
|
}
|
||||||
|
defer httpResp.Body.Close()
|
||||||
|
if httpResp.StatusCode != 200 {
|
||||||
|
fmt.Printf("XboxLive STS error: %s\n", httpResp.Status)
|
||||||
|
}
|
||||||
|
d, _ = io.ReadAll(httpResp.Body)
|
||||||
|
fmt.Printf("XboxLive STS Response: %s\n", d)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user