認証

REST APIコールを使用してOracle NoSQL Databaseを管理する前に、次の前提条件が満たされていることを確認します。
  • Oracle NoSQL Databaseにアクセスするための適切なログイン資格証明があることを確認してください。
  • Oracle NoSQL Databaseでadmin-web-portが構成されており、管理Webサービスが起動していることを確認します。Oracle NoSQL Database管理者ガイドmakebootconfigを参照してください。

REST APIを使用したログイン・リクエストおよびレスポンス

セキュリティ・ログインには次のURLを使用します。

/V0/nosql/admin/login

認可ヘッダーにおいて、base64でエンコードされた基本ログイン情報を指定する必要があります。ここで接頭辞としてBasicが使用されていることに注意してください。Authorization:Basic base64_encode(user_name:password)

次にログイン・トークンの例を示します。tokenパラメータ内の文字列は、サンプルのログイン・トークンです。
"returnValue" :
      {      "token" :
        "ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001" }

データ暗号化

セキュアなKVStoreへの接続時に、client.trustファイルから取得した証明書情報を指定する必要があります。client.trustファイルは、セキュアなKVStoreの構成時に、ストレージ・ノードのsecurityフォルダの下に作成されます。具体的に言うと、このclient.trustファイルは、クライアントがKVStoreにアクセスするために使用します。
  1. KVStoreによって提供されているclient.trustファイルを使用して、PEM形式で証明書ファイルを作成します。次に、client.trustファイルから取得した証明書情報の使用例を示します。
    keytool -exportcert -rfc -keystore KVROOT/security/client.trust -alias mykey \
    -file /tmp/client_security_dir/security/client.pem
  2. サーバー証明書で指定されているようにターゲットNoSQLサーバー・マシンのホスト名と一致するように、/etc/hostsファイルを変更します(デフォルトは"NoSQL")。cURLコマンドではデフォルトのホスト名検証機能が使用されるため、client.pemファイル内のホスト名エンティティは、デフォルトではNoSQLになります。cURL、またはカスタマイズされたホスト名検証機能を設定できないその他のツールを使用している場合は、/etc/hostsを、ターゲットNoSQLサーバー・マシンのホスト名がNoSQLと一致するよう変更する必要があります
    #/etc/hosts file
    127.0.0.1    localhost  NoSQL

    ノート:

    ここでは、makebootconfigコマンドによって生成された証明書で証明書にNoSQLが指定されているため、値NoSQLが/etc/hostsファイルに追加されます。ユーザー指定の証明書を使用している場合、この値は異なります。
  3. admin-web-portが構成されており管理Webサービスが起動していることを確認します。ログイン・トークンを取得するためにログイン・インタフェースにアクセスします。
    curl -i "https://NoSQL:port/V0/nosql/admin/login" -u username:password \
    --cacert /tmp/client_security_dir/security/client.pem --tlsv1
    管理サービスが実行されているマシンから匿名でログインする場合は、次のようにcURLコマンドを使用します。
    curl -i "https://NoSQL:port/V0/nosql/admin/login" \
    --cacert /tmp/client_security_dir/security/client.pem --tlsv1

セキュリティ・セッション

管理Webサービスでは、RMIベースの既存のNoSQLセキュリティ・パラメータと同じセキュリティ・セッション・パラメータが使用されます。セキュリティ・セッションのタイムアウトは、次のパラメータで制御します。

sessionTimeout = 24 hours

ログイン・リクエストへのレスポンス

ログイン・リクエストに対するレスポンスの例は、次のとおりです。
HTTP/1.1 200 OK
access-control-allow-origin: *
content-type: application/json
content-length: 221

{
   "operation" : "login",
   "returnCode" : 5000,
   "description" : "Operation ends successfully",
   "returnValue" : {
      "token" : "ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"
   }
}

ログイン・トークンのセキュリティ

前述の返されたログイン・トークンはユーザー資格証明に相当します。トークンは、ログアウトするか有効期限をすぎると失効します。未許可アクセスから守るためにログイン・トークンをその有効期間の間保護する必要があります。

ログイン・トークンを取得した後、管理Webサービス上でリクエストを実行する前に、認可ヘッダーにおいてそのトークンを設定する必要があります。ここで接頭辞としてBearerが使用されていることに注意してください。

Authorization:Bearer 
"ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"

管理Webサービスでは、すべてのユーザー・リクエストのアクセス制御のために、認証および認可が確認されます。

REST APIを使用したログアウト

ログアウトするには、次のURLを使用します。

/V0/nosql/admin/logout

リクエストの実行後、セッションからログアウトします。既存のセッションからログアウトするには、Bearer接頭辞内でログイン・トークンを指定します。たとえば:

curl -i "https://NoSQL:port/V0/nosql/admin/logout" \
--cacert /tmp/client_security_dir/security/client.pem \
-H "Authorization:Bearer login_token_in_hex_string" --tlsv1
ログアウト・セッションに対するレスポンスの例を次に示します。
{ 
    "operation" : "logout", 
    "returnCode" : 5000,   
    "description" : "Operation ends successfully",  
    "returnValue" : null
}

REST APIコール使用時のワークフロー

REST APIコールを使用してshow topologyコマンドを実行する例を考えてみます。

Bearer認証は、Bearerトークンと呼ばれるセキュリティ・トークンを含むHTTP認証スキームです。Bearerトークンは、特定のリソースまたはURLへのアクセスを許可し、通常はログイン・リクエストに応じてサーバーによって生成される暗号化文字列です。クライアントは、保護されたリソースにリクエストを行うときに、認可ヘッダーでこのトークンを送信する必要があります。

次に、ログインし、ログイン・トークンを使用してセキュリティ・リソースにアクセスし、ログアウトする方法の例を示します。

  1. ログイン・トークンの取得: ログイン・トークンを取得するためにログイン・インタフェースにアクセスします。
    $ curl -i "https://NoSQL:port/V0/nosql/admin/login" -u <userName:password> \
    --cacert "/tmp/client_security_dir/security/client.pem" --tlsv1
    ログイン・レスポンスの例を次に示します。
    HTTP/1.1 200 OK
    access-control-allow-origin: *
    content-type: application/json
    content-length: 221
    {
      "operation" : "login",
      "returnCode" : 5000,
      "description" : "Operation ends successfully",
      "returnValue" : {
      "token" : "ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"
      }
    }

    前述のコードで返されたログイン・トークンはユーザー資格証明に相当します。トークンは、ログアウトするか有効期限をすぎると失効します。

  2. Oracle NoSQL Databaseを管理するコマンドの発行: 管理Webサービスでは、すべてのユーザー・リクエストのアクセス制御のために、認証および認可が確認されます。show topologyリクエストは、前述のステップで生成されたログイン・トークンを使用して発行されます。
    $ curl -i -X POST "https://hostname:port/V0/nosql/admin/topology" \-d
          '{"command":"show"}' --cacert "/tmp/client_security_dir/security/client.pem"
          \-H "Authorization:Bearer ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"
          --tlsv1
    show topologyコマンドのレスポンス例を次に示します。
    HTTP/1.1 200 OK
    access-control-allow-origin: *
    content-type: application/json
    content-length: 1001
    {
       "operation" : "show topology",
       "returnCode" : 5000,
       "description" : "Operation ends successfully",
       "returnValue" : {
       "storeName" : "mystore",
       "numPartitions" : 20,
       "sequenceNumber" : 24,
       "zns" : [ {
          "resourceId" : "zn1",
          "name" : "1",
          "repFactor" : 1,
          "type" : "PRIMARY",
          "allowArbiters" : false,
          "masterAffinity" : false
       } ],
       "sns" : [ {
          "resourceId" : "sn1",
          "hostname" : "localhost",
          "registryPort" : 20000,
          "zone" : {
             "resourceId" : "zn1",
             "name" : "1",
             "repFactor" : 1,
             "type" : "PRIMARY",
             "allowArbiters" : false,
             "masterAffinity" : false
         },
         "capacity" : "1",
         "rns" : [ {
            "resourceId" : "rg1-rn1"
          } ],
         "ans" : [ ]
         } ],
         "shards" : [ {
             "resourceId" : "rg1",
             "numPartitions" : 20,
             "rns" : [ {
               "resourceId" : "rg1-rn1",
               "snId" : "sn1"
              } ],
             "ans" : [ ]
         } ]
      }
    }
  3. セッションからのログアウト: リクエストの実行後、セッションからログアウトします。
    $ curl -i "https://hostname:port/V0/nosql/admin/logout" \--cacert /tmp/client_security_dir/security/client.pem
            \-H "Authorization:Bearer 
              ACED00057722001900000177B4AE29670102105DB5C6928D2CC2C5615627E1BC5C68B10500000001"
            --tlsv1
    ログアウト・セッションに対するレスポンスの例を次に示します。
    {
       "operation" : "logout",
       "returnCode" : 5000,
       "description" : "Operation ends successfully",
       "returnValue" : null
    }