microsoft.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package oauth2
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "golang.org/x/oauth2"
  7. )
  8. type MicrosoftField struct {
  9. Sub string `json:"sub"`
  10. Name string `json:"name"`
  11. GivenName string `json:"given_name"`
  12. FamilyName string `json:"family_name"`
  13. Email string `json:"email"`
  14. Picture string `json:"picture"`
  15. }
  16. func microsoftScope() []string {
  17. return []string{"user.read openid email profile"}
  18. }
  19. func microsoftEndpoint() oauth2.Endpoint {
  20. return oauth2.Endpoint{
  21. AuthURL: "https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize",
  22. TokenURL: "https://login.microsoftonline.com/consumers/oauth2/v2.0/token",
  23. }
  24. }
  25. func microsoftUserInfo(accessToken string) (string, error) {
  26. client := &http.Client{}
  27. req, err := http.NewRequest("GET", "https://graph.microsoft.com/oidc/userinfo", nil)
  28. if err != nil {
  29. return "", err
  30. }
  31. req.Header.Set("Authorization", "Bearer "+accessToken)
  32. response, err := client.Do(req)
  33. if err != nil {
  34. return "", err
  35. }
  36. defer response.Body.Close()
  37. contents, err := ioutil.ReadAll(response.Body)
  38. var data MicrosoftField
  39. json.Unmarshal([]byte(contents), &data)
  40. return data.Email, err
  41. }