6

このポストhttp://dev.office.com/code-samples-detail/2142とRubyをフォローして、ユーザーの電子メールアドレスを取得しました。ここでは、コードは次のようになります。この機能は非常によく働いた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

、私は、ユーザーの電子メールアドレスを取得することができます。しかし今日、この関数はエラーなく動作しますが、JSONにはユーザーの電子メールアドレスが含まれていません。
誰かが私を助けることができますか?私はユーザーの電子メールアドレスを取得したい。ありがとうございました !

答えて

10

Azureは、v2アプリケーションモデルに大きな変更を加えました。デフォルトでは、ユーザー情報はもはや得られません。

あなたはすべてここでそれについて読むことができます:https://azure.microsoft.com/en-us/documentation/articles/active-directory-v2-preview-oidc-changes/が、要約する:

  • openid範囲はあなたのユーザーのための基本的なプロファイル情報を提供するためにを使用しました。

    # Scopes required by the app 
    SCOPES = [ 'openid', 
          'https://outlook.office.com/mail.read' ] 
    
    :OpenIDを標準
  • アズールは、このビットを見つけ、あなたはそのサンプルについて、その情報

へのアクセスを得るためにprofile範囲を要求することを要求するように変更と一致していなかった

  • し、それを変更します。

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

    速い返事をいただき、ありがとうございます。私は明日会社に来るときにそれを試してみる。 –

    +0

    Worked。ありがとうございました ! –

    +0

    こんにちは、カレンダーのイベントを取得するためにAPIを使用しています。これを行うには、有料アカウントにサインアップする必要がありますか? –

    2

    プロファイルを追加してください。そして、あなたのスコープ内のメール:

    SCOPES = [ 'OpenIDの'、 'プロファイル'、 のメール '、 'https://outlook.office.com/mail.read']

    +0

    Worked。ありがとうございました ! –

    +0

    mail.readを使用しないと、ユーザーのプロフィール情報を取得できません。メールの読み取り権限を求めたくない – Diego

    関連する問題