Australia リリース以降で非プリエンプティブ認証を使用すると、添付ファイル API が 401 ではなく 403 Forbidden を返す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: ; } } Australia リリースにアップグレードした後、REST クライアントが非プリエンプティブ (チャレンジ応答) 認証を使用するように構成されている場合、添付ファイル API (/api/now/attachment/file) への REST POST 要求が「Failed API level ACL Validation / User Not Authorized」で失敗します。 Symptoms<!-- /*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: ; } } 任意のテーブルを対象とする /api/now/attachment/file への POST リクエストは、401 Unauthorized 応答ではなく 403 Forbidden 応答を受信します。レスポンスボディには、"detail": "Failed API level ACL Validation" および "message": "User Not Authorized" が含まれます。クライアントをプリエンプティブ認証(最初のリクエストで認証情報を送信する方式)に切り替えると、同じリクエストは成功します。この動作は、u_internal_attachment などのカスタムテーブルだけでなく、すべての対象テーブルで再現できます。Australia リリースより前のリリースを実行しているインスタンスでは 401 が返されるため、非プリエンプティブクライアントはチャレンジレスポンスサイクルを完了して正常に認証できます。影響を受けるクライアントの例: 「Authenticate Pre-emptively」が無効になっている SoapUIプリエンプティブ認証が構成されていない Apache HttpClient明示的な Authorization ヘッダーを指定していない curl最初の呼び出しで認証を強制していない Python requests 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: ; } } Australia リリース以降 | 添付ファイル API (/api/now/attachment/file) | ベーシック認証を使用するすべての REST クライアント Cause<!-- /*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: ; } } Australia での変更点:Australia リリースより前は、認証情報なしのリクエストを受信すると、添付ファイル API は 401 Unauthorized 応答を返していました。Australiaリリース以降、添付ファイル API は、要求の受信後に ACL 評価を通じてアクセスを許可します。ACL レイヤーでアクセスが拒否されると、サーバーは 403 Forbidden を返します。この変更は意図的なものであり、プラットフォームで有効なゲストユーザーのユースケース構成をサポートするために必要でした。 これは仕様上の動作であり、欠陥ではありません。 非プリエンプティブクライアントに影響が発生する理由:非プリエンプティブ (チャレンジ応答) 認証は、クライアントが認証情報なしで最初のリクエストを送信し、サーバーからの 401 Unauthorized 応答をチャレンジとして待機してから、認証情報を使用してリクエストを再試行するクライアント側のパターンです。添付ファイル API は 401 ではなく 403 を返すようになったため、401 を契機とする再試行が開始されず、要求は失敗します。このパターンに依存するすべての REST クライアントが影響を受けます。 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: ; } } オプション 1 — REST クライアントでプリエンプティブ認証を有効にする(即時の修正): 401 チャレンジを待つのではなく、最初のリクエストで Basic Authentication の認証情報を送信するようにクライアントを構成します。SoapUI: リクエストレベルまたはプロジェクトレベルで Authenticate Pre-emptively を有効にします(Preferences > HTTP Settings > Authenticate Pre-emptively)。Apache HttpClient: プリエンプティブ実行インターセプターとともに BasicScheme.authenticate() を使用します。curl: デフォルトで認証情報をプリエンプティブに送信する -u username:password フラグを指定します。Python requests: リクエスト呼び出しで auth=HTTPBasicAuth(user, password) を直接渡します。 この変更を、Australia 以降のリリースで /api/now/attachment/ と連携するすべての統合クライアントおよび REST ツールに適用してください。 オプション 2 — OAuth 2.0 に切り替える(本番環境の統合に推奨): OAuth 2.0 はすべてのリクエストでアクセストークンを送信し、チャレンジレスポンスサイクルに依存しません。これはすべての ServiceNow REST 統合に推奨される認証方式であり、この動作変更の影響を受けません。セットアップ方法については、OAuth 2.0 プロファイルに関する ServiceNow のドキュメントを参照してください。