Last active
August 29, 2015 14:15
-
-
Save jfcote87/4fa7387925b99a7b7808 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "golang.org/x/oauth2" | |
| "golang.org/x/oauth2/google" | |
| "golang.org/x/oauth2/jwt" | |
| "log" | |
| ) | |
| // Private key generated on my machine. | |
| var properlyEncodedKey = `-----BEGIN RSA PRIVATE KEY----- | |
| MIICXQIBAAKBgQDBWQJZouUL+daxeuka++pm0+yathjVW7zTFobTdHo2FFo5Jumq | |
| LkMVL0AX7LiOEYTPoyGj9h/n64QDO2SrVKYfnyFQ6PpIqk/fP+O1hdFOwNMuSf61 | |
| q1WvnSjWGUdZKo8lkP69Tdzw6nHIYjRWR6YwMOMiWghlJVqbaAYyASCUbQIDAQAB | |
| AoGAQZtQXtYVXpDyNtr8Cjn8+dNjb8PmfU9ZrU7xhQL7DSquysHXe/WisaeM2hFr | |
| NlnfdQ1nttknTmzuKKKYsEJS88PQJ6imHe5pFJpYTpV9q/pM2DLxbu8dcNTQXcfO | |
| HsYx261nPA/gsIQqv3Rg8I8hAy2JKAE/yrcOv+f2hxVYtsECQQD7ZfuRKgw2IiZA | |
| RtDAPN546YEvbyhQNM2+AOgzJWtacEaISVGqqgficjtr1iXJ7Gw+prXwNLOcj5RU | |
| IyLqatnpAkEAxOMCW0UBZF9rRvnIjBBVwgs3RWl482EqO2vF7YwbfP9362l+noQz | |
| x3ius7uhspfHap90GT8ZaEROHtdZ0y8P5QJANFeGajHz+u1fQ3C7E9tYgpozYHnn | |
| TdPApnev4L5AvMK1nLiPPVZLb/VSs+ARXBpSazTwmoOOheFLA72RDneSyQJBAK7v | |
| XMqnd2MtfO3lRhFc+jWdLZDY9ASbUqDVU1mLYWkgu/ZJF53UrQUQ73j2v+clAKR1 | |
| 5PwBmpuQBTFV+pOvfxkCQQDFaPKB2rH9tPLMgbuybdSLQNvML4OSt5U2YmBCioqd | |
| m5cEqNzEyEoYIoCG6XTONUq2DsKjQF5/eaFUfTuxSAHc | |
| -----END RSA PRIVATE KEY-----` | |
| var improperlyEncodedKey = `-----BEGIN RSA PRIVATE KEY-----\n | |
| MIICXQIBAAKBgQDBWQJZouUL+daxeuka++pm0+yathjVW7zTFobTdHo2FFo5Jumq\n | |
| LkMVL0AX7LiOEYTPoyGj9h/n64QDO2SrVKYfnyFQ6PpIqk/fP+O1hdFOwNMuSf61\n | |
| q1WvnSjWGUdZKo8lkP69Tdzw6nHIYjRWR6YwMOMiWghlJVqbaAYyASCUbQIDAQAB\n | |
| AoGAQZtQXtYVXpDyNtr8Cjn8+dNjb8PmfU9ZrU7xhQL7DSquysHXe/WisaeM2hFr\n | |
| NlnfdQ1nttknTmzuKKKYsEJS88PQJ6imHe5pFJpYTpV9q/pM2DLxbu8dcNTQXcfO\n | |
| HsYx261nPA/gsIQqv3Rg8I8hAy2JKAE/yrcOv+f2hxVYtsECQQD7ZfuRKgw2IiZA\n | |
| RtDAPN546YEvbyhQNM2+AOgzJWtacEaISVGqqgficjtr1iXJ7Gw+prXwNLOcj5RU\n | |
| IyLqatnpAkEAxOMCW0UBZF9rRvnIjBBVwgs3RWl482EqO2vF7YwbfP9362l+noQz\n | |
| x3ius7uhspfHap90GT8ZaEROHtdZ0y8P5QJANFeGajHz+u1fQ3C7E9tYgpozYHnn\n | |
| TdPApnev4L5AvMK1nLiPPVZLb/VSs+ARXBpSazTwmoOOheFLA72RDneSyQJBAK7v\n | |
| XMqnd2MtfO3lRhFc+jWdLZDY9ASbUqDVU1mLYWkgu/ZJF53UrQUQ73j2v+clAKR1\n | |
| 5PwBmpuQBTFV+pOvfxkCQQDFaPKB2rH9tPLMgbuybdSLQNvML4OSt5U2YmBCioqd\n | |
| m5cEqNzEyEoYIoCG6XTONUq2DsKjQF5/eaFUfTuxSAHc\n | |
| -----END RSA PRIVATE KEY-----` | |
| func main() { | |
| // The properly encoded key formats the jwt assertion and sends it to the server. | |
| // In this case the server correctly returns a 400 Error because there is no | |
| // [email protected]. | |
| c := getConfig(properlyEncodedKey) | |
| _, err := c.TokenSource(oauth2.NoContext).Token() | |
| log.Printf("Err = %#v", err) | |
| // Prints: | |
| // 2015/02/20 11:07:37 Err = oauth2: cannot fetch token: 400 Bad Request | |
| // Response: { | |
| // "error" : "invalid_grant" | |
| // } | |
| // Using an improperly encoded pem file, internal.ParseKey(js.conf.PrivateKey) fails | |
| // and returns an unhelpful error. | |
| c = getConfig(improperlyEncodedKey) | |
| _, err = c.TokenSource(oauth2.NoContext).Token() | |
| log.Printf("Err = %v", err) | |
| // Prints: | |
| // 2015/02/20 11:07:37 Err = asn1: structure error: tags don't match (16 vs {class:0 tag:13 length:45 isCompound:true}) {optional:false explicit:false application:false defaultValue:<nil> tag:<nil> stringType:0 set:false omitEmpty:false} pkcs1PrivateKey @2 | |
| } | |
| func getConfig(pem string) *jwt.Config { | |
| return &jwt.Config{ | |
| Email: "[email protected]", | |
| PrivateKey: []byte(pem), | |
| TokenURL: google.JWTTokenURL, | |
| Scopes: []string{"profile"}, | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment