LoginSignup
8
2

More than 5 years have passed since last update.

API Connectで、APIキーを変更する方法

Posted at

はじめに & やりたいこと

API 呼び出しの際に、APIキーを用いてアクセス制御を行うことがよく行われています。API Connectでも、APIキー(API Connectでは、クライアントIDとクライアント・シークレットと表現)を用いて、認証、流量制御等を行うことができます。APIキー(クライアントIDとクライアント・シークレット)は、API Connectで自動で生成されます。

このAPIキーを独自に設定したい、あるいはテスト環境で発行されたAPIキーをそのまま本番環境で利用したいなど、APIキーを変更したい場合があります。APIキー(クライアントIDとクライアント・シークレット)を変更する方法を記述します。

APIキーは、開発者ポータルAPIを利用して変更することができます。開発者ポータルAPIに関しては、API Connectで、公開しているAPIを利用しているアプリケーションの一覧を取得する方法に情報があるので、そちらも参照ください。

参考

IBM API Connect V5.0 Knowledge Center : Update application credentials

手順

ここでは、APIキーのクライアントIDとクライアント・シークレットは以下に変更することにします。

  • クライアントID : id
  • クライアント・シークレット : password

Update application credentialsは、APIのエンドポイントに間違いがあるのですが、参考になります。クライアント・シークレットを変更する場合、クライアント・シークレットの前処理と、実際の変更を行う際に必要な情報、製品が内部で持っているIDを取得する必要があります。

  1. クライアント・シークレットの前処理
  2. ポータルAPIの利用
    • 開発者組織IDを取得
    • アプリケーションID、アプリクリデンシャルIDを取得
    • APIキーを変更する

1. クライアント・シークレットの前処理

クライアント・シークレットの文字列は、SHA256でハッシュし、16進にダンプし、Base64エンコードする必要があります。Macだと以下のような感じで行います。

$> echo -n 'password' | shasum -a 256
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8  -

$> echo '5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8' | xxd -r -p | base64
XohImNooBHFR0OVvjcYpJ3NgPQ1qq73WKhHvch0VQtg=

2. ポータルAPIの利用

開発者組織IDを取得

別記事にも記述がありますが、開発者組織IDを取得します。

# パラメーターセット
PROVIDER_ORG_NAME=provider # プロバイダー組織の名前
CATALOG_NAME=catalog # カタログの名前
MANAGEMENT_SERVICE_ADDRESS=mgt.test.com # 管理サーバーのアドレス
SYSTEM_USER=systemuser@**.* # システムロールのユーザー
SYSTEM_USER_PWD=******** # システムロールのユーザーのパスワード

curl -k -u cmc/${SYSTEM_USER}:${SYSTEM_USER_PWD} -H "X-IBM-APIManagement-Context: ${PROVIDER_ORG_NAME}.${CATALOG_NAME}" -H 'Content-Type: application/json' -X GET https://${MANAGEMENT_SERVICE_ADDRESS}/v1/portal/orgs
[
  {
    "roles":[
      "589d13a3e4b0910bcd616e42"
    ],
    "id":"589d13a3e4b0910bcd616e41",
    "name":"dev",
    "url":"https://mgt.test.com/v1/portal/orgs/589d13a3e4b0910bcd616e41",
    "owner":true
  }
]

該当の開発者組織名(上の例の場合 dev )の"id"の値が、開発者組織IDです。開発者組織が複数ある場合は、複数表示されるため、名前で確認が必要です。

アプリケーションID、アプリクリデンシャルIDを取得

次に、該当の開発者組織が保有し、APIキー(クライアントID, クライアント・シークレット)を変更したいアプリケーションIDとアプリクリデンシャルIDを取得します。

# パラメーターセット
PROVIDER_ORG_NAME=provider # プロバイダー組織の名前
CATALOG_NAME=catalog # カタログの名前
MANAGEMENT_SERVICE_ADDRESS=mgt.test.com # 管理サーバーのアドレス
SYSTEM_USER=systemuser@**.* # システムロールのユーザー
SYSTEM_USER_PWD=******** # システムロールのユーザーのパスワード
orgID=589d13a3e4b0910bcd616e41 # 開発者組織ID

curl -k -u cmc/${SYSTEM_USER}:${SYSTEM_USER_PWD} -H "X-IBM-APIManagement-Context: ${PROVIDER_ORG_NAME}.${CATALOG_NAME}" -H 'Content-Type: application/json' -X GET https://${MANAGEMENT_SERVICE_ADDRESS}/v1/portal/orgs/${orgID}/apps
[
  {
    "id":"596ee1d5e4b01755c9dc6c95",
    "name":"ClientSecret",
    "orgID":"589d13a3e4b0910bcd616e41",
    "public":false,
    "description":"",
    "credentials":
      {
        "clientID":"936691a3-ce41-44f9-8879-9631d6ae0e02",
        "clientSecret":"********************************************",
        "description":"Default",
        "url":"https://mgt.test.com/v1/portal/orgs/589d13a3e4b0910bcd616e41/apps/596ee1d5e4b01755c9dc6c95/credentials"
      },
    "appCredentials":[
      {
        "id":"596ee1d5e4b01755c9dc6c96",
        "description":"Default",
        "url":"https://mgt.test.com/v1/portal/orgs/589d13a3e4b0910bcd616e41/apps/596ee1d5e4b01755c9dc6c95/credentials/596ee1d5e4b01755c9dc6c96",
        "clientID":"936691a3-ce41-44f9-8879-9631d6ae0e02",
        "clientSecret":"********************************************"
      }
    ],
    "enabled":true,
    "state":"ACTIVE",
    "imageURL":null,
    "oauthRedirectURI":"",
    "createdAt":"2017-07-19T04:36:37.560+0000",
    "updatedAt":"2017-07-19T04:36:37.560+0000",
    "url":"https://mgt.test.com/v1/portal/orgs/589d13a3e4b0910bcd616e41/apps/596ee1d5e4b01755c9dc6c95"
  }
]

該当のアプリケーション名(上の例の場合 ClientSecret)の "id"の値 "596ee1d5e4b01755c9dc6c95" がアプリケーションIDになります。アプリクリデンシャルIDは、"appCredentials"要素の"id"の値 "596ee1d5e4b01755c9dc6c96" になります。
開発者組織と同じ様に、アプリケーションが複数ある場合は複数表示されるため、アプリケーション名で判別する必要があります。

APIキーを変更

ここまでの手順で必要な情報が揃ったので、APIキー(クライアントID、クライアント・シークレット)を変更します。

# パラメーターセット
PROVIDER_ORG_NAME=provider # プロバイダー組織の名前
CATALOG_NAME=catalog # カタログの名前
MANAGEMENT_SERVICE_ADDRESS=mgt.test.com # 管理サーバーのアドレス
SYSTEM_USER=systemuser@**.* # システムロールのユーザー
SYSTEM_USER_PWD=******** # システムロールのユーザーのパスワード
orgID=589d13a3e4b0910bcd616e41 # 開発者組織ID
appID=596ee1d5e4b01755c9dc6c95 # アプリケーションID
credID=596ee1d5e4b01755c9dc6c96 # アプリクリデンシャルID

curl -k -u cmc/${SYSTEM_USER}:${SYSTEM_USER_PWD} -H "X-IBM-APIManagement-Context: ${PROVIDER_ORG_NAME}.${CATALOG_NAME}" -H 'Content-Type: application/json' -d '{"clientID" : "id", "clientSecret" : "XohImNooBHFR0OVvjcYpJ3NgPQ1qq73WKhHvch0VQtg=", "description" :"" }' -X PUT https://${MANAGEMENT_SERVICE_ADDRESS}/v1/portal/orgs/${orgID}/apps/${appID}/credentials/${credID}
{
  "id":"596ee1d5e4b01755c9dc6c96",
  "description":"",
  "url":"https://mgt.test.com/v1/portal/orgs/589d13a3e4b0910bcd616e41/apps/596ee1d5e4b01755c9dc6c95/credentials/596ee1d5e4b01755c9dc6c96",
  "clientID":"id",
  "clientSecret":"********************************************"
}

これで、APIキー(クライアントID、クライアント・シークレット)の変更は完了しました。

変更の確認

クライアント・IDの確認と、クライアント・シークレットの検証は、開発者ポータルでも提供されています。ここでは、開発者ポータルで確認します。コマンドで変更後、開発者ポータルに反映されるのに数分かかる場合があります。
該当のアプリケーションを選択し、クライアントIDの"表示"チェックボックスにチェックを入れるとクライアントIDに関しては確認できます。
スクリーンショット 2017-07-20 12.01.48.png

クライアント・シークレットの確認は、"検証"ボタンを押し、クライアント・シークレットの検証が可能です。
スクリーンショット 2017-07-20 12.03.00.png

クライアント・シークレットを検証されたことが確認できます。
スクリーンショット 2017-07-20 12.03.51.png

開発者ポータルAPIを利用して、APIキー(クライアントID、クライアント・シークレット)の変更を行いました。

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2