microsoft.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. req.Header.Set("Authorization", "Bearer "+accessToken)
  29. response, err := client.Do(req)
  30. defer response.Body.Close()
  31. contents, err := ioutil.ReadAll(response.Body)
  32. var data MicrosoftField
  33. json.Unmarshal([]byte(contents), &data)
  34. return data.Email, err
  35. }