0

私はこのチュートリアルに従い、返されたトークンをデコードし、電子メール アドレス ( preferred_usernameプロパティに格納する必要があります) を抽出するところまで到達しました。つまり、次のコードです。

decoded_token = Base64.urlsafe_decode64(encoded_token)
jwt = JSON.parse(decoded_token)
email = jwt['preferred_username']

問題は、返されたオブジェクトにこのプロパティが含まれていないことです。返される内容は次のようになります。

{  
   "ver":"2.0",
   "iss":"https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0",
   "aud":"0ab6433e-84fc-469b-8c72-41f7a0241a61",
   "exp":1458142389,
   "iat":1458055989,
   "at_hash":"0OYaLKpTTdHNBrQNOqwQ0Q",
   "sub":"AAAAAAAAAAAAAAAAAAAAAC1TrOaOmvInYrFAyrQjlFI",
   "tid":"9188040d-6c67-4c5b-b112-36a304b66dad"
}

仕様をざっと見てみると、Office 365 から正しいオブジェクトを取得していることがわかります。preferred_usernameは潜在な要求として言及されていますが、取得したオブジェクトには含まれていません。

正しいパラメーターでget_token関数を呼び出していない可能性がありますが、ライブラリのドキュメントはかなりまばらなので、実際にはわかりません。

Github で問題を提起しました。

これは Office 365 側のエラーですか、チュートリアルのエラーですか、それとも自分で何か間違ったことをしていますか?

4

2 に答える 2

1

通常の HTTP リクエストを使用してこの問題を再現しようとしていますが、preferred_usernameプロパティを正常に取得できました。

私の知る限り、リクエストでopenidスコープを指定した場合にのみ、このプロパティを取得できます。この問題を絞り込むために、Ruby なしで Fiddler または Postman を使用することをお勧めします。

Web ブラウザーと Fiddler を使用して、参照用の id トークンを取得するテストを次に示します。

  1. Office 365 アカウントを使用してポータルにアプリを登録します (チュートリアルを参照できます)。
  2. 以下のリンクから Web ブラウザで認証コードを取得します: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id= {ClientID}&response_type=code&redirect_uri={RedirectURL}&response_mode=query&scope=https %3A%2F%2Foutlook.office.com%2Fmail.read%20https%3A%2F%2Foutlook.office.com%2Fmail.send%20 openid &state=12345
  3. プレビュー リクエストの認証コードを置き換え、Fiddler を使用してリクエストを送信し、トークンを取得します。

    POST: https://login.microsoftonline.com/common/oauth2/v2.0/token grant_type=authorization_code&client_id={ClientID}&scope=https%3A%2F%2Foutlook.office.com%2Fmail.read%20https%3A% 2F%2Foutlook.office.com%2Fmail.send%20 openid &redirect_uri=http%3A%2F%2Flocalhost%3A55065%2F&client_secret={ClientSecret}&code={AuthCode}

  4. 以下のリンクから ID トークンをデコードします。

    https://jwt.io/

その後、ID トークンから Preferred_username プロパティを正常に取得できました。

于 2016-03-16T08:50:51.530 に答える
1

Microsoft の Jason Johnstonによる回答 (チュートリアルの作成者) :

Azure チームが v2 認証エンドポイントに重大な変更をデプロイしたため、preferred_username が存在しなくなりました。auth_helper.rb の SCOPES 配列にプロファイルを追加する必要があります。Build カンファレンスの後に、チュートリアルの更新を投稿します。

auth_helper.rbの SCOPES 配列は次のようになります。

SCOPES = [ 'openid', 'https://outlook.office.com/mail.read', 'profile' ]
于 2016-03-16T12:56:36.487 に答える