40.1 認証

RESTは、管理RESTサービスにアクセスする前に認証が必要です。まず、Oracle Application Expressインスタンス管理者が、Oracle Application Expressアプリケーションにログインし、RESTクライアントを登録する必要があります。

クライアントがインスタンス管理にすでに登録されている場合は、ダイアログにクライアントIDクライアント・シークレットが表示されるので、クライアントはそれを使用して、OAuth2 Client Credentialsフローに続く認証を実行できます。まずクライアントは、資格証明としてクライアントIDクライアント・シークレットを使用して接続します。認証に成功すると、サーバーからOAuthアクセス・トークンが返されます。このアクセス・トークンを使用して、クライアントは管理RESTサービスにアクセスできます。

HTTPリクエスト構文のパラメータ

表40-1 HTTP Request構文

パラメータ 説明

HTTPメソッド

POST

URL

http://application-express-host:port/ords/apex_instance_admin_user/oauth/token

リクエスト・ボディ

grant_type=client_credentials

HTTPリクエスト・ヘッダー

"Content-Type": "application/x-www-form-urlencoded" "Authorization": Client-ID:Client Secret in Base64-encoded form

戻り値

認証に成功すると、次の構造でJSONオブジェクトを戻します。

{
  "access_token": OAuth access token fot subsequent requests,
  "token_type":   "bearer",
  "expires_in":   lifetime of the OAuth token, in seconds; typically "3600"
}

認証が成功しない場合、サーバーからはHTTP-401:Unauthorizedが戻されます。

次の例では、ClientIDがクライアントIDを表し、ClientSecretがクライアント・シークレットを表しています。

例1

この例では、コマンドライン・ユーティリティcurlを実行すると、次の出力が表示されます。

   $ curl -i 
          --user ClientId:ClientSecret 
          --data "grant_type=client_credentials" 
          http://application-express-host:port/ords/apex_instance_admin_user/oauth/token

   HTTP/1.1 200 OK
   Content-Type: application/json
   Transfer-Encoding: chunked

   "access_token":"LfXJilIBdzj5JPRn4xb5QQ..","token_type":"bearer","expires_in":3600

JSONパーサーを使用してaccess_token属性の値を取得し、それを後続のリクエストで使用します。

例2

この例では、他のApplication ExpressインスタンスでAPEX_WEB_SERVICEを使用したとき、次の出力が表示されます。

  begin
       apex_web_service.oauth_authenticate(
           p_token_url =>     'http://application-express-host:port/ords/apex_instance_admin_user/oauth/token',
           p_client_id =>     'ClientId',
           p_client_secret => 'ClientSecret'
       );
       dbms_output.put_line( 'The token is: ' || apex_web_service.oauth_get_last_token );
   end;
   /

   The token is: LfXJilIBdzj5JPRn4xb5QQ..

取得したOAuthアクセス・トークンで、管理RESTサービスをコールできます。