OIDC プロバイダーによって生成されたサードパーティトークンを使用してインスタンスデータを読み取るときに、ユーザー認証エラーが発生するIssue 概要 OIDC プロバイダーによって生成されたサードパーティトークンを使用して、受信 Rest コールでテーブルを読み込もうとすると、ユーザー認証エラーが発生します。 説明 ロンドンで導入された OAuth 認証の新機能では、OIDC プロバイダーを設定して、クライアントがインスタンスのテーブルを読み取る際に使用するクライアントアプリケーションにトークンを付与します。 このソリューションでは、サードパーティの OIDC プロバイダーによって生成された JWT トークンを使用してインスタンステーブルを読み取るときに発生する可能性のある認証エラーを克服する方法について説明します。 インスタンスデータを読み取ろうとした際に発生する、Postman で報告されたエラー: {"error": {"detail": "Required to provide Auth information","message": "User Not Authenticated"},"status": "failure"} 解決策 サードパーティの OIDC プロバイダーによって生成された JWT トークンを使用してインスタンスデータを読み取る場合は、次の点に注意してください。これはロンドンでのリリースで導入された新機能です。 - JWT トークンの「aud」(対象者) フィールドが、インスタンスで構成されている OIDC エンティティのクライアント ID をマッピングしていることを確認します。 - JWT トークンの「issuer」値が、インスタンスの OIDC プロバイダー構成で構成された OIDC メタデータの URL データをマッピングしていることを確認してください - ユーザー要求が、JWT トークンから渡される内容に依存する [sys user] テーブル内のユーザー名または電子メールに構成されていることを確認します。プロファイルで使用されている権限許可タイプにかかわらず、要求フィールドが JWT トークンに存在することを確認してください。 OIDC の設定手順 1. OIDC プロバイダーにアプリを登録します (この KB では Okta を OIDC プロバイダーとして使用します)。 2. OAuth プロバイダー構成を設定します。 3. OAuth エンティティを構成します。 サンプル JWT トークン: eyJraWQiOiJjNTZtZTlXU0xPVnY3UFMwcTg4Qzl1b0lzNjFQYTdmUG4yZFVFOW9RNUg4IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIwMHVnZDg1ODVkczI1WXpUSjBoNyIsIm5hbWUiOiJpbXJhbiBhbGkiLCJsb2NhbGUiOiJlbi1VUyIsImVtYWlsIjoiaW1yb241NDNAZ21haWwuY29tIiwidmVyIjoxLCJpc3MiOiJodHRwczovL2Rldi05MzQxMjEub2t0YXByZXZpZXcuY29tIiwiYXVkIjoiMG9hZ2Q4bzk3a2lCT3dwd0IwaDciLCJpYXQiOjE1Mzc5MzMzMjYsImV4cCI6MTUzNzkzNjkyNiwianRpIjoiSUQueThVdXpWNUg2bm16SzRsOTI1RFVrQnJoR1o1MmJzVVpGVHRVTEphQjg3ayIsImFtciI6WyJwd2QiXSwiaWRwIjoiMDBvZ2Q4NTgycEFqZDZTemcwaDciLCJub25jZSI6InNub3ciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJpbXJvbjU0M0BnbWFpbC5jb20iLCJnaXZlbl9uYW1lIjoiaW1yYW4iLCJmYW1pbHlfbmFtZSI6ImFsaSIsInpvbmVpbmZvIjoiQW1lcmljYS9Mb3NfQW5nZWxlcyIsInVwZGF0ZWRfYXQiOjE1Mzc5MzAxOTcsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhdXRoX3RpbWUiOjE1Mzc5Mjk2NjF9.OG87SYxWFgHGlhBYby2H79diRm9rlYZTeEkIINRUatwg-p4739htB8xEY-5_t6yU_6k5w10pdgtt5M5QFZRPXVbQZNoGtY-Bxn0BjaimcFgoWfhY_0ldnGTkzN2RYyIHvrf9-yhxg347zvczmLrgMMa_VwG4rxrtE6rUXaIpIeIK5b-Deq8ADz8UTUTKpF_5RWk4X-oh5xK6BLniFHk4ShOZq2v_mjproXwKk5euJKrVrar2lQ4adZCOSTRuTf3ThMO5WDh0sel-82LngXtLzRJJ51IqxAsXns0kJHLLqLtH1hXNRKfwT1ScQoE_OfWm4t0KryI2j4wSMEanFtLXIw ペイロード: { "sub": "00ugd8585ds25YzTJ0h7", "name": "kalyan srinivas", "locale": "en-US", "email": "kalyan@gmail.com", --> インスタンスは、[sys user] テーブルでこのメールフィールド値をチェックしてユーザーを認証します。 "ver": 1, "iss": "https://dev-934121.oktapreview.com", "aud": "0oagd8o97kiBOwpwB0h7", --> これは、インスタンスの OIDC エンティティ構成の [クライアント ID] フィールド値と等しくなければなりません。 "iat": 1537933326, "exp": 1537936926, "jti": "ID.y8UuzV5H6nmzK4l925DUkBrhGZ52bsUZFTtULJaB87k", "amr": [ "pwd" ], "idp": "00ogd8582pAjd6Szg0h7", "nonce": "snow", "preferred_username": "kalyan@gmail.com", "given_name": “kalyan", "family_name": "Sri", "zoneinfo": "America/Los_Angeles", "updated_at": 1537930197, "email_verified": true, "auth_time": 1537929661 } インスタンスデータを読み取るために JWTトークンをサンプルテストする方法: curl -X GET --header "Accept:application/json" https://<Instance name>/api/now/table/<table name> -k --header "Authorization: Bearer eyJraWQiOiJjNTZtZTlXU0xPVnY3UFMwcTg4Qzl1b0lzNjFQYTdmUG4yZFVFOW9RNUg4IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIwMHVnZDg1ODVkczI1WXpUSjBoNyIsIm5hbWUiOiJpbXJhbiBhbGkiLCJsb2NhbGUiOiJlbi1VUyIsImVtYWlsIjoiaW1yb241NDNAZ21haWwuY29tIiwidmVyIjoxLCJpc3MiOiJodHRwczovL2Rldi05MzQxMjEub2t0YXByZXZpZXcuY29tIiwiYXVkIjoiMG9hZ2Q4bzk3a2lCT3dwd0IwaDciLCJpYXQiOjE1Mzc5MzMzMjYsImV4cCI6MTUzNzkzNjkyNiwianRpIjoiSUQueThVdXpWNUg2bm16SzRsOTI1RFVrQnJoR1o1MmJzVVpGVHRVTEphQjg3ayIsImFtciI6WyJwd2QiXSwiaWRwIjoiMDBvZ2Q4NTgycEFqZDZTemcwaDciLCJub25jZSI6InNub3ciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJpbXJvbjU0M0BnbWFpbC5jb20iLCJnaXZlbl9uYW1lIjoiaW1yYW4iLCJmYW1pbHlfbmFtZSI6ImFsaSIsInpvbmVpbmZvIjoiQW1lcmljYS9Mb3NfQW5nZWxlcyIsInVwZGF0ZWRfYXQiOjE1Mzc5MzAxOTcsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhdXRoX3RpbWUiOjE1Mzc5Mjk2NjF9.OG87SYxWFgHGlhBYby2H79diRm9rlYZTeEkIINRUatwg-p4739htB8xEY-5_t6yU_6k5w10pdgtt5M5QFZRPXVbQZNoGtY-Bxn0BjaimcFgoWfhY_0ldnGTkzN2RYyIHvrf9-yhxg347zvczmLrgMMa_VwG4rxrtE6rUXaIpIeIK5b-Deq8ADz8UTUTKpF_5RWk4X-oh5xK6BLniFHk4ShOZq2v_mjproXwKk5euJKrVrar2lQ4adZCOSTRuTf3ThMO5WDh0sel-82LngXtLzRJJ51IqxAsXns0kJHLLqLtH1hXNRKfwT1ScQoE_OfWm4t0KryI2j4wSMEanFtLXIw"