OAuth2 トークンのリフレッシュIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } OAuth2 アプリケーションに関する一般的な問題は、トークンの有効期限と更新に関するものです。この例では、Entra ID (Microsoft) を使用して構成された OAuth メールアカウント を参照用にサードパーティ OAuth プロバイダーとして使用します。 TL;DR:ServiceNow は、トークン更新要求に対する OAuth プロバイダー (ServiceNow またはサードパーティ) からの応答で受信したものを使用して、既存のアクセストークンとリフレッシュトークンを常に更新します。OAuth プロバイダーが応答で既存のリフレッシュトークンを送信すると、リフレッシュトークンの有効期限が誤って延長されてしまいます。この問題は Yokohama で解決され、新しいフィールド リフレッシュトークンの有効期限を延長 が OAuth エンティティ テーブルに追加されました。権限許可タイプが「refresh_token」の場合、このフィールドが true に設定されている場合にのみ、リフレッシュトークンの有効期限が延長されます。 OAuth フローでは、主に次の 2 種類のトークンを使用します。 アクセストークン - クライアントが保護された Web API を安全に呼び出して、特定のリソースにアクセスできるようにします。[更なる情報]トークンのリフレッシュ:現在のアクセストークンの有効期限が切れたときに、新しいアクセス権とリフレッシュトークンのペアを取得するために使用されます。[更なる情報] 受信したトークンは OAuth 認証情報 [oauth_credential] テーブルで管理され、[oauth_requestor_profile] フィールドを使用してアプリにリンクし直すことができます。 トークンの有効期間 アクセストークンの場合、デフォルトの有効期間は 60 〜 90 分の値です。アクセストークン は通常、単なる JWT であり、要求の形式でエンティティに関する情報が含まれています。これらには、スコープと有効期限が含まれます。詳細については、「」を参照してください。 一方リフレッシュ トークンの有効期間ははるかに長く、通常は 90 日間です。OAuth エンティティ [oauth_entity] レコードの リフレッシュトークンの有効期間 (「refresh_token_lifespan」) のデフォルト値は 100 日 (86,40,000 秒) です。この値は、OAuth プロバイダーの リフレッシュトークン ライフタイムポリシーに従って調整する必要があります (例:Entra ID の場合は 90 日)。アクセストークンとは異なり、リフレッシュトークンはOAuthプロバイダー、つまりEntra IDによってのみデコードできるため、これは重要です。クライアント ServiceNow は、 トークンのリフレッシュ から有効期限を取得できず、トークンのリフレッシュにのみ使用できます。 注:トークンの有効期間は OAuth プロバイダー (この例では Entra ID) によって設定され、プロバイダー側でのみ構成できます。詳細については、 「Microsoft ID プラットフォームの構成可能なトークンの有効期間」を参照してください。 トークンの更新 この例を参照して、ServiceNow では メールアクセストークンのリフレッシュ スケジュール [sys_trigger.do?sys_id=c01b8a732b7ca210c286f216d891bffc] ジョブが提供されており、これは 3 分ごとに実行されます。このジョブは、スケジュール済みスクリプト実行 メールアクセストークンのリフレッシュ [sysauto_script.do?sys_id=35faf162eb233100469a20425206fedc] を呼び出し、続いて EmailOAuthHelper Script Include [sys_script_include.do?sys_id=52d69ceaeb233100469a20425206feb6] を呼び出します。 ここでは、 アクセストークン の有効期限が切れているかどうかを確認し、 GlideOAuthClient - requestTokenByRequest API を呼び出してトークンを更新します。これは、[syslog] テーブルで「Refreshing oauth access token for email」を検索することで確認できます。 アクセストークン リフレッシュ要求が送信されると、OAuth プロバイダーは通常、応答内の新しい アクセストークンとともに リフレッシュトークン を送り返します。OAuth プロバイダーに応じて、受信した 要求トークン は、有効期限が延長された新しいものでも、既存のものでもかまいません。たとえば、ServiceNow は OAuth プロバイダーとして、既存の リフレッシュトークン を送り返します。ただし、この例では、Entra ID はリクエストごとに有効期限が延長された新しい ID を送信します。 これは、次のように EmailOAuthHelper Script Include [sys_script_include.do?sys_id=52d69ceaeb233100469a20425206feb6] にいくつかのログステートメントを追加することで検証できます。 また、ログで受信した リフレッシュトークン を既存のものと比較できます。 ServiceNow は、既存のアクセストークンとリフレッシュトークンを、OAuth プロバイダー (ServiceNow またはサードパーティ) からの応答で受け取ったもので常に更新します。 この問題は、受信した リフレッシュトークン がインスタンスに既に存在するものであるが、 リフレッシュトークン が受信/更新されてからの時間と設定された有効期間を計算することで有効期限が誤って延長されてしまう場合に発生します。この問題については、「KB1649654」でも説明されています。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Yokohama Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Yokohama より前では、受信した リフレッシュトークン の有効期限は、権限許可タイプに関係なく延長されます。 Yokohama 以降、新しいブールフィールド リフレッシュトークンの有効期限を延長 「extend_refresh_token_expiry」が OAuth エンティティ [oauth_entity] レコードに追加されました。これは false に設定されています デフォルトでは [sys_dictionary.do?sys_id=8171982b9820221055904c91e2b65469%26sysparm_view=oauth_provider]。 リフレッシュトークンの有効期限は、このフィールドが true、または権限許可タイプが 「refresh_token」以外の場合にのみ延長されます。この例では、権限許可タイプは "refresh_token です。したがって、要求ごとに Entra ID から新しいリフレッシュトークンを受信するため、リフレッシュトークンの有効期限を延長を true に設定リフレッシュトークン有効期限を延長する必要があります。 注意:このフィールドはデフォルトではフォームに表示されず、レイアウトに追加するために設定する必要があります。 Related Links<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } OAuth クライアント (コンシューマー) リフレッシュトークンの有効期限を更新しないする修正スクリプトを使用して Okta アクセストークンとリフレッシュトークンを自動的に取得するGlideOAuthClient - スコープ指定、グローバル