2016-02-24 11 views
6

Połączyłem się z tym wpisem http://dev.office.com/code-samples-detail/2142 i Ruby, aby uzyskać adres e-mail użytkownika. Oto kod:Nie można zalogować się za pomocą poczty e-mail przy użyciu interfejsu REST API usługi Office 365

# Parses an ID token and returns the user's email 
 
def get_email_from_id_token(id_token) 
 

 
    # JWT is in three parts, separated by a '.' 
 
    token_parts = id_token.split('.') 
 
    # Token content is in the second part 
 
    encoded_token = token_parts[1] 
 

 
    # It's base64, but may not be padded 
 
    # Fix padding so Base64 module can decode 
 
    leftovers = token_parts[1].length.modulo(4) 
 
    if leftovers == 2 
 
    encoded_token += '==' 
 
    elsif leftovers == 3 
 
    encoded_token += '=' 
 
    end 
 

 
    # Base64 decode (urlsafe version) 
 
    decoded_token = Base64.urlsafe_decode64(encoded_token) 
 

 
    # Load into a JSON object 
 
    jwt = JSON.parse(decoded_token) 
 

 
    # Email is in the 'preferred_username' field 
 
    email = jwt['preferred_username'] 
 
end

Funkcja ta działa bardzo dobrze, mogę dostać adres e-mail użytkownika. Ale dzisiaj ta funkcja nadal działa bezbłędnie, ale JSON nie zawiera już adresu e-mail użytkownika.
Czy ktoś może mi pomóc? Chcę uzyskać adres e-mail użytkownika. Dziękuję Ci !

Odpowiedz

10

Usługa Azure wdrożyła przełomową zmianę modelu aplikacji v2, a domyślne informacje użytkownika nie są już dostępne.

Można przeczytać o tym tutaj: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/, ale Podsumowując:

  • openid zakres wykorzystywane dać podstawowe informacje o profilu dla użytkownika.
  • To nie był zgodny z OpenID standardowej
  • Azure zmienił wymagać, aby poprosić zakresu profile aby uzyskać dostęp do tych informacji

dla tej próbki, znaleźć ten bit:

# Scopes required by the app 
SCOPES = [ 'openid', 
      'https://outlook.office.com/mail.read' ] 

i zmień ją na:

# Scopes required by the app 
SCOPES = [ 'openid', 
      'profile', 
      'https://outlook.office.com/mail.read' ] 
+0

Dziękuję za szybką odpowiedź. Spróbuję, kiedy jutro przyjdę do firmy. –

+0

Pracował. Dziękuję Ci ! –

+0

Cześć, używamy interfejsu API do przechwytywania zdarzeń kalendarza, a następnie wiadomości e-mail powiązanych z tym wydarzeniem. Czy musimy teraz założyć płatne konto, aby to uzyskać? –

2

proszę dodać profil i e-mail w zakresie:

ZAKRESY = [ 'OpenID', 'profil', 'email', 'https://outlook.office.com/mail.read']

+0

Pracowałem. Dziękuję Ci ! –

+0

Jeśli nie używam mail.read, nie mogę uzyskać informacji profilu użytkownika, nie chcę prosić o zezwolenie odczytu poczty – Diego

Powiązane problemy