OAuth 2.0 - Authorization Code Grant タイプの Bearer Token を生成する方法Issue Now Platform は、パブリッククライアントが access token を生成するための OAuth 2.0 - Authorization Code Grant タイプをサポートしています。これには次の 3 つの手順が必要です。 アプリケーションを登録するAuthorization Code を生成するAuthorization Code を使用して Bearer Token を生成する ユースケース Access Token を使用して Table API または Scripted Web Service にアクセスします。 アプリケーションを登録する System OAuth > Application Registry > Create an OAuth API endpoint for external clients に移動します。 名前定義名前登録済みアプリの名前クライアント ID登録済みアプリのクライアント IDクライアントシークレット登録済みアプリのクライアントシークレットリダイレクト URI認証コードがこの URI に返されます。これは通常、登録済みアプリのエンドポイントです (スクリーンショットの login.do はデモ用)。認証コードの有効期間 認証コードの有効期間です。必要に応じて有効期間を延長してください。デフォルトでは60秒で有効期限が切れます。(編集するには、フォームまたはリストビューの列に auth_code_lifespan フィールドを追加し、60を超える整数に増やしてください) アクセストークンの有効期間アクセストークンの有効期間リフレッシュトークンの有効期間リフレッシュトークンの有効期間 Authorization Code を生成する Authorization code を生成するには user login が必要です。次の手順を使用して authorization code を生成します。 authorization endpoint にアクセスします。これには response type、redirect uri、および client id が必要です。サンプル: 以下に合わせて URL を編集し、ブラウザーに入力してください。 https://<Instance_Name>.service-now.com/oauth_auth.do?grant_type=authorization_code&redirect_uri=https://<Instance_Name>.service-now.com/login.do&client_id=<CLIENT_ID>&response_type=code&state=123 詳細は 次を確認してください。 Authorization code flow state parameter requirement ユーザーは OAuth ログインページ /oauth_login.do にリダイレクトされます。有効な認証情報を入力します。[ユーザーに oauth_credential テーブルへの読み取り/書き込み権限があることを確認するか、ACL の問題を回避するために "admin" アカウントを使用してください] ユーザーはリクエストを Allow または Deny する必要があります。 Allow をクリックすると、Authorization code が redirect uri に返されます。これはブラウザーの URL に表示され、次のようになります。 https://<INSTANCE_NAME>.service-now.com/login.do?code=iz8efjPNK-4Q_ZOS3DcEqcJa9oXo1uLhpItv30PhaeknEfGWMF2haVCpYwGLg7cXzVpYqkMnkHF242VuFe8ZCQ&state=123 Authorization code はデフォルトで 60 秒間有効です。そのため、次の手順に時間がかかりすぎた場合は、手順 2 ~ 5 を再実行して新しいコードを取得してください。 Application Registry で、auth_code_lifespan フィールドをフォームに追加した後、リストビューまたはフォームからこの値を増やすことができます。 コードをコピーしてください。このコードは次の手順で使用します。 Bearer Token を生成する oauth_token.do は access token を生成するための POST(form url encoded)をサポートしています。access token を生成するには、code、redirect uri、client id、client secret、および grant type が必要です。 その後、Postman または cURL を使用してリクエストを送信できます。 PostmanPost https://<Instance_Name>.service-now.com/oauth_token.do Body [x-www-form-urlencoded] ここで "redirect_uri"、"grant_type"、"code"、"client_secret" および "client_id" を更新します。 Curl: curl -d "grant_type=authorization_code&code=<AUTH_CODE>&client_id=<CLIENT_ID>&client_secret=<CLIENT_SECRET>&redirect_uri=https://<INSTANCE_NAME>.service-now.com/login.do" https://<INSTANCE_NAME>.service-now.com/oauth_token.do サンプル出力: { "access_token": "SFgoFLvSiNVIwtU9O1U0hNsk2PaogKYkyg2KtnoilUmmeliibScwAG8A1vQlXODllLvHhcD1", "refresh_token": "GyLc-OX2Jd-NHpMpQUJbIcOhgqkQu-WoWhqNX68xouWV47Mn2TKqGU12EDsUoShND", "scope": "", "token_type": "Bearer", "expires_in": 1799 } Facts ここに記載されている Client ID、Client Secret、および Authorization code は、実際のエンドポイントに接続されていないサンプルデータです。お客様の環境に対して正しい値を使用していることを確認してください。 Release すべて Resolution エラーを解決するために、必要なすべてのパラメーターが渡されていることを確認してください。その後、access token の有効期限が切れるまで、他の API 呼び出しに access token を使用できます。 呼び出し中に "access_denied" などのエラーが発生する場合は、次を実施してください。 同じユーザー名/パスワードを使用して UI へのログインをテストし、MFA が必要でないことを確認します。 OAuth 呼び出しに使用するユーザーがローカルログインを問題なく実行できる場合は、次の手順に進みます。そうでない場合は、この動作を修正してください。 上記を実行できる admin ロールを持つユーザーで OAuth 呼び出しをテストしてください。admin ユーザーでは動作し、別のユーザーでは動作しない場合、そのユーザーには OAuth トークンを取得するための十分なロールがありません。 snc_internal、web_service_admin、oauth_admin などの追加ロールを付与してみてください。問題がロールにない場合は、Application Registry に設定されている Auth Scope を確認してください。 Related Links RFC: https://tools.ietf.org/html/rfc6749#section-1.3.1