アプリケーションを作成していて気付いたことを紹介します。
アクセストークンの有効期間
Microsoft社のドキュメントに、Azure ADが発行するアクセストークンの有効期間について説明があります。
https://learn.microsoft.com/ja-jp/azure/active-directory/develop/access-tokens#access-token-lifetime
アクセス トークンの既定の有効期間は、可変です。 発行されると、アクセス トークンの既定の有効期間には、60 分から 90 分 (平均 75 分) の範囲のランダムな値が割り当てられます。
APEXアプリケーションのセッションの有効期限は、アプリケーション定義のセキュリティのセッション管理に、最大セッションの長さ(秒)として設定できます。
この値はアクセストークンの有効期間以下に設定する必要があります。
上記の警告は、ユーザーにAPEXアプリケーションに再度サインインを行うことを要求しています。サインインをし直すまでは警告が表示され続けますが、今まで説明しているようにナビゲーション・メニューからサインアウトすると、Azure ADからサインアウトします。
ここで再度サインインしてくださいをクリックすると、Azure ADからはサインアウトしていないため、Azure ADによるユーザー認証なしで新しいAPEXセッションが確立します。
最大セッションの長さ(秒)がアクセストークンの有効期間より長いと、アクセストークンの有効期間が過ぎた時点でGraph APIのエラーが発生します。
再度、APEXアプリケーションにサインインし直してアクセス・トークンを取得すれば回復します。しかし、APEXアプリケーションよりサインアウトを行うとAzure ADからもサインアウトします。
以下のページに遷移します。
APEXのセッションのみを再確立する場合は、URLのsession=の値を0に変更してアプリケーションを呼び出します。
https://ホスト名/ords/r/ワークスペース/アプリケーション別名/ページ別名?session=0
Azure ADによるサインイン時に、サインインの状態を維持しますか?と聞かれています。それにはいと答えていれば、APEXのセッションを再確立する際に再度ユーザー認証を要求されることはありません。
APEXの最大セッションの長さのデフォルトは28800秒=8時間と長いので、あまり以下のようなセッション・タイムアウト警告を見ることはありません。
実際にはAPEXのセッションのみを再確立すれば良いので、引数sessionに0を渡すようなアクセスが必要です。
最終的にセッションがタイムアウトすると、以下のポップアップが表示されます。
セッション・タイムアウト警告(秒)を0に設定すると、警告のポップアップを抑止することはできます。
この場合、警告ポップアップは表示されませんが、例えばフォームにいろいろデータを入力した後に送信ボタンを押した時点でタイムアウトが発生する可能性が出てきます。それまでの作業は無くなってしまいます。
一つの例ですが、ナビゲーション・バーに以下のようなエントリを作成して対応することもできます。
ターゲットタイプとしてURLを選択し、URLターゲットに以下を指定します。sessioin=0を含めています。(ワークスペース名を直書きしています。異なる場合は変更の必要があります。)
/ords/r/apexdev/onedrive-operation/home?session=0
ナビゲーション・バーにセッションの継続というエントリが追加され、このリンクをクリックすることにより再認証をせずにアクセストークンの更新ができるようになります。
Azure ADでのアプリケーションのアクセス許可としてoffline_accessを含めているため、Azure ADとしてはリフレッシュ・トークンの発行は可能です。
しかし、APEXのWeb資格証明のストアド・トークンを確認すると、リフレッシュ・トークンが増えることはありません。
よって、アクセス・トークンの更新をするために、セッションのタイムアウトの度(最長でも1時間おき)に、APEXセッションの再確立が必要になります。
WEBURLについて
DriveItemの一覧を取得すると、属性としてWEBURLというのがありました。対話モード・レポートの列WEBURLのタイプをリンクに変更し、ターゲットのタイプをURL、ターゲットを#WEBURL#に変更して、表示されているリンクをクリックしてみました。
PowerPointファイルでは、ブラウザ版のPowerPointが起動して選択したファイルが開きました。