6

Ich folgte diesem Beitrag http://dev.office.com/code-samples-detail/2142 und Ruby, um die E-Mail-Adresse des Benutzers zu erhalten. Hier ist der Code:Kann nicht in E-Mail mit Office 365 REST-API

# 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

Diese Funktion sehr gut funktioniert, kann ich Benutzer-E-Mail-Adresse. Aber heute funktioniert diese Funktion immer noch ohne Fehler, aber der JSON habe ich nicht mehr die E-Mail-Adresse des Benutzers enthalten.
Könnte mir jemand helfen? Ich möchte die E-Mail-Adresse des Benutzers erhalten. Vielen Dank !

Antwort

10

Azure hat eine brechende Änderung in das v2 App-Modell implementiert und Sie erhalten keine Benutzerinformationen mehr standardmäßig.

Sie können alles darüber lesen Sie hier: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/, aber zusammenfassen:

  • Der openid Umfang verwendet Sie grundlegende Profilinformationen für den Benutzer zu geben.
  • , die nicht im Einklang mit dem OpenID Standard
  • Azure geändert wurde zu verlangen, dass Sie den profile Umfang beantragen, erhalten Zugang zu diesen Informationen

für diese Probe, findet diesen Bit:

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

und ändern sie es zu:

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

Vielen Dank für die schnelle Antwort. Ich werde es versuchen, wenn ich morgen zur Firma komme. –

+0

gearbeitet. Vielen Dank ! –

+0

Hallo, wir verwenden die API, um Kalenderereignisse und dann die mit dem Ereignis verknüpfte E-Mail zu erfassen. Müssen wir uns jetzt für ein kostenpflichtiges Konto anmelden, um das zu bekommen? –

2

Bitte fügen Profil und E-Mail in Ihrem Bereich:

SCOPES = [ 'openid', 'Profil', 'E-Mail', 'https://outlook.office.com/mail.read']

+0

Arbeitete. Vielen Dank ! –

+0

Wenn ich mail.read nicht benutze, kann ich die Profilinformationen der Benutzer nicht abrufen, ich möchte nicht um die Leseberechtigung für Mail bitten – Diego