CData API Serverのユーザー管理をAPI化してみる

2020.10.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

REST API構築ツール CData API Server を使うことで簡単にAPIを構築することができます。その際にCData API Serverでユーザー登録を行いCData API Serverへ接続を行うための認証トークンを発行することで認証トークンを使ってAPIへリクエストを送ることができます。 ただユーザー数が増えた場合にCData API Serverの管理画面で一人ひとり作るのも大変だったのでその管理方法をCData API ServerのAPIを使って管理してみます。

環境

  • Amazon Linux 2
  • CData API Server - 19.0.7362.0

ユーザー管理のAPI化

ポイントは「ユーザー管理用のDBを用意」した上でセキュリティ強化のためにユーザー管理用のAPIを「ユーザー固有接続」で特定のユーザー・環境のみでアクセスさせることです。

「ユーザー管理用のDBを使用」、「ユーザー固有接続」ともに以前のエントリで解説しているのでまずはこちらをご確認いただき設定を行ってください。

今回の環境ではCData API Serverをインストールしたサーバーと同じサーバーへMariaDBをインストールしそこへユーザー管理用DBを作成します。

  • MariaDB接続情報
    • server: 127.0.0.1
    • port: 3306
    • Database: cdata
    • user: root

ユーザー管理用DBのコネクションの作成

はじめにCData API ServerのWeb管理画面でユーザー管理用DBの接続を作成します。接続の作成は通常の接続作成と同じ手順で進めますが、特定のユーザー以外には使わせたくないのでユーザー固有接続の機能で使えるユーザーを制御します。

1.Master Connectionにチェックを入れる一度変更を保存を謳歌するとユーザー登録RULが表示されるます。ユーザー固有接続の設定で使うのでどこかにメモっておきます。

2.次にユーザーを作成します。ユーザー管理機能を操作できるAPIになるのでそれ専用のユーザーを作成します。権限は読み取り・作成・修正・削除を行うのでGETPOSTPUTDELETEをチェックしておきます。

またユーザー名は適当で問題有りませんがリソースの設定で使います。今回はcdataというユーザーで作成しています。

ここで一旦管理画面をログアウトしてユーザー固有接続の設定を行います。

手順1で表示されたユーザー登録RULにアクセスすると認証画面が開きますのでユーザー名に手順2で作成したユーザー名(今回の例ですとcdata)、パスワードに手順2で作成した認証トークンを入直します。すると設定画面が開くので設定を行います。

3.CData API Server管理用のユーザー接続情報を入力します。

この際に他のDBユーザーと分けてCData API Server管理DB用のユーザーを作成し、そのユーザーを使用することが望ましいです。

以上でCData API Server管理用のコネクションが作成できたので次にリソースの作成へ進みます。

ユーザー管理用DBのリソースの作成

次にユーザー管理用のAPIを作成します。これも通常のリソース設定と同じ用に行えばよいのですが、一点だけ異なる設定を行います。

再度CData API Serverの管理画面へ管理者としてログインします。

1.リソースの作成でユーザー管理用に設定したコネクションを選択し、リソースを作成します。

2.MariaDBのcdataデータベースに存在するCData API ServerのテーブルでAPIリソースが作成されているのでその中からapp_usersを選択します。

3.リソースの編集画面で操作カラムの全てにチェックが入っていることを確認します。

また作成したAPIには専用のユーザーしかアクセスさせたくないためユーザーの許可+{ユーザー名}を入力します。今回の例ですとユーザー名がcdataなので入力する値は+cdataになります。

以上で設定は完了です。では実際にAPIにリクエストを送ってみたいと思います。

ユーザー管理用APIにリクエストを送る

GETメソッドでユーザー情報取得できる事を確かめます。

curl --header "x-cdata-authtoken: MY_AUTH_TOKEN" "http://{ホスト名}:8080/api.rsc/app_users/"

ユーザー情報が返ってきます。

{
  "@odata.context": "http://{ホスト名}:8080/api.rsc/$metadata#app_users",
  "value": [
    {
      "active": "True",
      "authtoken": "xxxxxxxxxxxxxxxxxx",
      "authtoken2": "",
      "candirectquery": true,
      "expiredin": 0,
      "isgroup": 0,
      "maxconcurrent": -1,
      "maxrequest": -1,
      "method": "GET,POST",
      "tokencreation": 1593563701,
      "tokencreation2": -1,
      "username": "test"
    },
    {
      "active": "True",
      "authtoken": "xxxxxxxxxxxxxxxxxxx",
      "candirectquery": false,
      "expiredin": 0,
      "isgroup": 0,
      "maxconcurrent": -1,
      "maxrequest": -1,
      "method": "GET,POST,PUT,MERGE,PATCH,DELETE",
      "tokencreation": 1593569440,
      "tokencreation2": -1,
      "username": "cdata",
      "authtoken2": null
    }
  ]
}

当然他のメソッドも使えます。詳しい使い方はCData API Serverの管理画面からリソース情報でリクエストの送り方等確認できますのでそちらをご確認ください。

まとめ

CData API Serverに登録するユーザーをAPI化して登録・変更・削除できるようにしてみました。CData API Serverのユーザーを外部システムと連携するような使い方を行う場合もあるかと思います。そのような境に今回行った手法でAPI化して連携をしてみたらいかがでしょうか。

最後まで読んで頂いてありがとうございました。