2016-02-24 35 views
6

Ho seguito questo post http://dev.office.com/code-samples-detail/2142 e Ruby per ottenere l'indirizzo email dell'utente. Ecco il codice:Impossibile accedere all'e-mail utilizzando l'API REST di 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

Questa funzione ha funzionato molto bene, posso ottenere l'indirizzo di posta elettronica dell'utente. Ma oggi, questa funzione funziona ancora senza errori, ma il JSON I non ha più contenuto l'indirizzo email dell'utente.
Qualcuno potrebbe aiutarmi? Voglio ottenere l'indirizzo email dell'utente. Grazie !

risposta

10

Azure ha implementato una modifica al modello di app v2 e non si ottengono più le informazioni utente per impostazione predefinita.

Potete leggere tutto su di esso qui: https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/, ma per riassumere:

  • Il openid ambito utilizzato per darvi informazioni profilo di base per l'utente.
  • che non era in linea con la norma OpenID
  • Azure cambiato per richiedere che si richiede l'ambito profile per avere accesso a tali informazioni

Per quel campione, trovare questo bit:

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

E modificarla in:

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

Grazie per la risposta rapida. Lo proverò quando verrò in azienda domani. –

+0

lavorato. Grazie ! –

+0

Ciao, stiamo usando l'API per prendere gli eventi del calendario e poi l'e-mail associata a detto evento. Dobbiamo ora registrarsi per un account a pagamento per ottenere questo? –

2

si prega di aggiungere il profilo e-mail nel campo di applicazione:

SCOPI = [ 'OpenID', 'profilo', 'e-mail', 'https://outlook.office.com/mail.read']

+0

Ha funzionato. Grazie ! –

+0

Se non uso mail.read Non riesco a ottenere le informazioni sul profilo degli utenti, non voglio chiedere il permesso di leggere la posta – Diego