トップ回答者
VS2015の「接続済みサービスの追加」で追加したOffice 365 APIの認証時の文字化けとJavaScriptエラー

質問
-
こちらのフォーラムに投稿するのが適切なのかがよくわかっていないのですが、Azure ADにかかわる箇所と判断し投稿させていただきました。
Visual Studio 2015のCordovaプロジェクトに対して「接続済みサービスの追加」から「Office 365 API」を追加し、Office 365上のデータにアクセスするコードを試しています。
Office 365との認証時、表示名や姓名が日本語のアカウントでログインしようとすると、idTokenに含まれる名前の情報が文字化け(例:\"family_name\":\"芳野\")し、idTokenをJSON.parse()メソッドで処理できず「JavaScript 実行時エラー: 文字が正しくありません。」というエラーが発生してしまいます。
「o365auth.js」のidToken取得処理に対して、文字コードや言語の指定を変更することでどうにかならないかとも思うのですが、自力でうまく解決できていません。
どなたかアドバイスいただけないでしょうか。
回答
-
試していないので正確な回答にはなっていないのですが、「o365auth.js」がUTF-8に対応していないと考えます。
ソースを追ってみました。
o365auth.js で Microsoft.Utility.decodeBase64AsString を呼び出して、idTokenをBASE64からdecodeしています。このdecode処理に問題があると思います。
具体的には decodeBase64AsString からさらに呼び出される decodeBase64 の window.atob(base64) です。
ここを ユニコード文字列 の対応を行えばうまくいくかも知れません。
手元に開発環境が無いため、あくまで推測ですがお試しください。
- 回答の候補に設定 ayatakaMVP, Moderator 2015年8月26日 16:18
- 回答としてマーク 星 睦美 2015年9月3日 1:52
すべての返信
-
試していないので正確な回答にはなっていないのですが、「o365auth.js」がUTF-8に対応していないと考えます。
ソースを追ってみました。
o365auth.js で Microsoft.Utility.decodeBase64AsString を呼び出して、idTokenをBASE64からdecodeしています。このdecode処理に問題があると思います。
具体的には decodeBase64AsString からさらに呼び出される decodeBase64 の window.atob(base64) です。
ここを ユニコード文字列 の対応を行えばうまくいくかも知れません。
手元に開発環境が無いため、あくまで推測ですがお試しください。
- 回答の候補に設定 ayatakaMVP, Moderator 2015年8月26日 16:18
- 回答としてマーク 星 睦美 2015年9月3日 1:52
-
binaryStr.charCodeAt(i) の部分も問題ありそうです。
How to convert UTF8 string to byte array? のような対応が必要かもしれません。
ライブラリがUTF-8に対応した作りになれば良いんですけど、どこに言えば良いかなぁ…
- 編集済み nnasakiMVP 2015年8月25日 1:44