OAuth2 トークンのリフレッシュIssue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #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 Email Account を使用します。 要約: ServiceNow は、トークンリフレッシュリクエストに対して、OAuth プロバイダー (ServiceNow またはサードパーティ) からの応答で受信したトークンで、既存のアクセストークンとリフレッシュトークンを常に更新します。OAuth プロバイダーが応答で既存のリフレッシュトークンを送信した場合、リフレッシュトークンの有効期限が意図せず延長されます。この問題は、OAuth Entity テーブルに新しいフィールド Extend Refresh Token Expiry が追加された Yokohama で対処されています。グラントタイプが「refresh_token」の場合、リフレッシュトークンの有効期限は、このフィールドが true に設定されている場合にのみ延長されます。 OAuth フローでは、主に次の 2 種類のトークンを使用します。 アクセストークン - クライアントが保護された Web API を安全に呼び出して、特定のリソースにアクセスできるようにします。[詳細情報]トークンのリフレッシュ:現在のアクセストークンの有効期限が切れたときに、新しいアクセス権とリフレッシュトークンのペアを取得するために使用されます。[詳細情報] 受信したトークンは OAuth Credentials [oauth_credential] テーブルで保持され、[oauth_requestor_profile] フィールドを使用してアプリにリンクできます。 トークンの有効期間 アクセストークンの場合、デフォルトの有効期間は 60 〜 90 分の値です。アクセストークン は通常、単なる JWT であり、要求の形式でエンティティに関する情報が含まれています。これらには、スコープと有効期限が含まれます。詳細については、「KB2071947」を参照してください。 一方リフレッシュ トークンの有効期間ははるかに長く、通常は 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: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #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: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Yokohama より前バージョンでは、受信した リフレッシュトークン の有効期限は、権限許可タイプに関係なく延長されます。 Yokohama 以降では、OAuth Entity [oauth_entity] レコードに新しいブール型フィールド Extend Refresh Token Expiry「extend_refresh_token_expiry」が追加されており、デフォルトでは 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: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } OAuth Client (consumer) refresh token expiry should not get updatedObtain Okta Access and Refresh Token automatically using fix scriptGlideOAuthClient - Scoped, Global