6 OAUTH PL/SQLパッケージのリファレンス

OAUTH PL/SQLパッケージには、Oracle REST Data Servicesを使用してOAuth認証を実装するプロシージャが含まれています。

6.1 OAUTH.CREATE_CLIENT

形式

OAUTH.CREATE_CLIENT(
   p_name            IN VARCHAR2,
   p_grant_type      IN VARCHAR2,
   p_owner           IN VARCHAR2 DEFAULT NULL,
   p_description     IN VARCHAR2 DEFAULT NULL,
   p_origins_allowed IN VARCHAR2 DEFAULT NULL,  
   p_redirect_uri    IN VARCHAR2 DEFAULT NULL,
   p_support_email   IN VARCHAR2 DEFAULT NULL,
   p_support_uri     IN VARCHAR2  DEFAULT NULL,
   p_privilege_names IN VARCHAR2
   p_token_duration   IN NUMBER,
   p_refresh_duration IN NUMBER,
   p_code_duration    IN NUMBER)

説明

OAuthクライアントの登録を作成します。

パラメータ

p_name

クライアントの名前で、Three-Legged OAuthの承認フェーズでエンド・ユーザーに表示されます。一意である必要があります。

p_grant_type

authorization_codeimplicitまたはclient_credentialsのいずれかである必要があります。

p_owner

クライアント・アプリケーションを所有するパーティの名前です。

p_description

クライアントの目的の説明で、Three-Legged OAuthの承認フェーズでエンド・ユーザーに表示されます。p_grant_typeclient_credentialsの場合はnullにもできます。それ以外の場合はnullにはできません。

p_origins_allowed

URLの接頭辞のカンマ区切りリスト。リストが空の場合、既存のオリジンは削除されます。

p_redirect_uri

OAuthアクセス・トークンまたはエラーが含まれるリダイレクトが送信されるクライアント制御URIです。p_grant_typeclient_credentialsの場合はnullにもできます。それ以外の場合はnullにはできません。

p_support_email

エンド・ユーザーがサポートを得るためにクライアントに連絡できる電子メールです。

p_support_uri

エンド・ユーザーがサポートを得るためにクライアントに連絡できるURIです。例: http://www.myclientdomain.com/support/

p_privilege_names

クライアントがアクセスするカンマ区切りの権限のリストです。

p_token_duration
アクセス・トークンの期間(秒単位)。NULL期間はORDSインスタンスの値にフォールバックします。デフォルトでは、プロパティを使用して設定されるか、3600秒に設定されます。
p_refresh_duration

リフレッシュ・トークンの期間(秒単位)。NULL期間はORDSインスタンスの値にフォールバックします。デフォルトでは、プロパティを使用して設定されるか、86400秒に設定されます。

p_code_duration

grant_type値がauthorization codeの場合にのみ適用可能なコード・トークンの期間(秒単位)。値がNULLに設定されているか、grant_type値がauthorization_codeでない場合、存続期間はORDSインスタンスで定義されている期間になります。デフォルトの値は300です。

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、OAuthクライアント登録を作成します。

BEGIN
  OAUTH.create_client(
    'CLIENT_TEST',
    'authorization_code',
    'test_user',
    'This is a test description.',
    '',
    'https://example.org/my_redirect/#/',
    'test@example.org',
    'https://example.org/help/#/',
    'MyPrivilege',
    NULL,
    NULL,
    NULL
    );
    COMMIT;
END;
/

6.2 OAUTH.DELETE_CLIENT

形式

OAUTH.DELETE_CLIENT(
   p_name IN VARCHAR2);

説明

OAuthクライアント登録を削除します。

パラメータ

p_name

削除されるクライアント登録の名前です。

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、OAuthクライアント登録を削除します。

BEGIN
  OAUTH.delete_client(
    'CLIENT_TEST'
    );
  COMMIT;
END;
/

6.3 OAUTH.GRANT_CLIENT_ROLE

形式

OAUTH.GRANT_CLIENT_ROLE(
   p_client_name IN VARCHAR2,
   p_role_name   IN VARCHAR2);

説明

OAuthクライアントに指定したロールを付与し、クライアントがTwo-Legged OAuthを実行して、ロールを要求する権限にアクセスできるようにします。

パラメータ

p_client_name

OAuthクライアントの名前です。

p_role_name

付与されるロールの名前です。

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、ロールを作成し、OAuthクライアントにそのロールを付与します。

BEGIN
  ORDS.create_role(p_role_name => 'CLIENT_TEST_ROLE');

  OAUTH.grant_client_role(
    'CLIENT_TEST',
    'CLIENT_TEST_ROLE'
    );
  COMMIT;
END;
/

6.4 OAUTH.RENAME_CLIENT

形式

OAUTH.RENAME_CLIENT(
   p_name     IN VARCHAR2,
   p_new_name IN VARCHAR2);

説明

クライアントの名前を変更します。

パラメータ

p_name

クライアントの現在の名前です。

p_new_name

クライアントの新しい名前です。

使用上のノート

クライアントの名前はThree-Legged OAuthの承認フェーズでエンド・ユーザーに表示されます。

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、クライアントの名前を変更します。

BEGIN
  OAUTH.rename_client(
    'CLIENT_TEST',
    'CLIENT_TEST_RENAMED'
    );
  COMMIT;
END;
/

6.5 OAUTH.REVOKE_CLIENT_ROLE

形式

OAUTH.REVOKE_CLIENT_ROLE(
   p_client_name  IN VARCHAR2,
   p_role_name    IN VARCHAR2);

説明

OAuthクライアントから指定したロールを削除し、クライアントがTwo-Legged OAuthを通じてロールを要求する権限にアクセスすることを防ぎます。

パラメータ

p_client_name

OAuthクライアントの名前です。

p_role_name

削除されるロールの名前です

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、OAuthクライアントから指定したロールを削除します。

BEGIN
  OAUTH.revoke_client_role(
    'CLIENT_TEST_RENAMED',
    'CLIENT_TEST_ROLE'
    );
  COMMIT;
END;
/

6.6 OAUTH.UPDATE_CLIENT

形式

OAUTH.UPDATE_CLIENT(
  p_name             IN VARCHAR2,
  p_description      IN VARCHAR2,
  p_origins_allowed  IN VARCHAR2,
  p_redirect_uri     IN VARCHAR2,
  p_support_email    IN VARCHAR2,
  p_suppor_uri       IN VARCHAR2,
  p_privilege_names  IN t_ords_vchar_tab DEFAULT NULL,
  p_token_duration   IN NUMBER,
  p_refresh_duration IN NUMBER,
  p_code_duration    IN NUMBER
);

説明

クライアント情報を更新します(名前を除く)。null値を指定すると、既存のクライアント・プロパティは変更されません。

パラメータ

p_name

所有者、説明、使用可能な起点、サポート電子メール、サポートURIおよび権限変更を要求するクライアントの名前です。

p_description

クライアントの目的の説明で、Three-Legged OAuthの承認フェーズでエンド・ユーザーに表示されます。

p_origins_allowed

URLの接頭辞のカンマ区切りリスト。リストが空の場合、既存のオリジンは削除されます。

p_redirect_uri

OAuthアクセス・トークンまたはエラーが含まれるリダイレクトが送信されるクライアント制御URI。このパラメータがnullの場合、既存のp_redirect_uri値(存在する場合)は変更されません。

p_support_email

エンド・ユーザーがサポートを得るためにクライアントに連絡できる電子メール・アドレスです。

p_support_uri

エンド・ユーザーがサポートを得るためにクライアントに連絡できるURIです。例: http://www.myclientdomain.com/support/

p_privilege_names

クライアントがアクセスする権限の名前のリストです。

p_token_duration

アクセス・トークンの期間(秒単位)。NULL期間はORDSインスタンスの値にフォールバックします。デフォルトでは、プロパティを使用して設定されるか、3600秒に設定されます。

p_refresh_duration

リフレッシュ・トークンの期間(秒単位)。NULL期間はORDSインスタンスの値にフォールバックします。デフォルトでは、プロパティを使用して設定されるか、86400秒に設定されます。

p_code_duration

grant_typeauthorization codeの場合にのみ適用可能なコード・トークンの期間(秒単位)。値がNULLに設定されているか、grant_typeauthorization_codeでない場合、存続期間はORDSインスタンスで定義されている期間になります。デフォルトの値は300です。

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

クライアントの名前を変更する場合は、 OAUTH.RENAME_CLIENTプロシージャを使用します。

指定のクライアントの説明を更新する例

次の例では、p_nameの値と一致する名前を持つクライアントの説明を更新します。

BEGIN
  ORDS_METADATA.OAUTH.update_client(
    p_name => 'CLIENT_TEST_RENAMED',
    p_description => 'The description was altered',
    p_origins_allowed => null,
    p_redirect_uri => null,
    p_support_email => null,
    p_support_uri => null,
    p_privilege_names => null,
    p_token_duration => null,     
    p_refresh_duration => null,    
    p_code_duration    => null);
  COMMIT;
END;
/

例6-1 複数の権限を追加する例

次の例は、2つめの権限を追加します。

declare 
 my_privs t_ords_vchar_tab  := t_ords_vchar_tab (); 
begin 
 my_privs.EXTEND (3); 
 my_privs(1):='tst.privilege1'; 
 my_privs(2):='tst.privilege2'; 
 
 oauth.update_client( 
    p_name => 'Test_Client', 
    p_description => 'Description altered.',
    p_origins_allowed => NULL,
    p_redirect_uri => '/abc/efg/', 
    p_privilege_names => my_privs,
    p_token_duration => NULL,
    p_refresh_duration => NULL,
    p_code_duration    => NULL); 
commit; 
end;

関連トピック

6.7 OAUTH.ROTATE_CLIENT_SECRET

形式

OAUTH.ROTATE_CLIENT_SECRET(
      p_client_id       IN NUMBER,
      p_editing_user    IN VARCHAR2,
      p_revoke_sessions IN BOOLEAN DEFAULT TRUE);

説明

ROTATE_CLIENT_SECRETは、新しいクライアント・シークレットを再生成し、デフォルトで既存のクライアント・セッションをすべて削除します。

パラメータ

p_client_id

変更されたクライアントのID。

p_editing_user
この変更をリクエストするユーザー。
p_revoke_sessions

既存のクライアント・セッションの承認を取り消す必要があるかどうかを制御します。デフォルト値はTRUEです。

次の例では、クライアント・シークレットをローテーションします。
BEGIN
  OAUTH.ROTATE_CLIENT_SECRET(
  p_client_id => 1234567890,
  p_editing_user => 'USERA',
  p_revoke_sessions => TRUE
  );
END;
/

6.8 OAUTH.UPDATE_CLIENT_SECRET

形式

OAUTH.UPDATE_CLIENT_SECRET(
      p_client_name  IN VARCHAR2,
      p_editing_user  IN VARCHAR2,
      p_client_secret  IN VARCHAR2);

説明

UPDATE_CLIENT_SECRETは、クライアントのシークレットに新しい値を設定します。デフォルトでは、既存のクライアント・セッションがすべて削除されます。

パラメータ

p_client_name

現在のスキーマ内のクライアントの名前。

p_editing_user

この変更をリクエストするユーザー。

p_client_secret

クライアントの新しいシークレットの値。

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、特定のクライアントのシークレットを更新します。

BEGIN
  OAUTH.UPDATE_CLIENT_SECRET(
        p_client_name   => 'CLIENT_TEST',
        p_editing_user   => 'USERA ',
        p_client_secret  => 'RaFhM690PA6cN1ffpkNx3Q..');
END;
/

6.9 OAUTH.IMPORT_CLIENT

形式

OAUTH.IMPORT_CLIENT(
    p_name                 IN VARCHAR2,
    p_client_id            IN VARCHAR2,
    p_client_secret        IN VARCHAR2 DEFAULT NULL,
    p_grant_type           IN VARCHAR2,
    p_owner                IN VARCHAR2 DEFAULT NULL,
    p_description          IN VARCHAR2 DEFAULT NULL,
    p_origins_allowed      IN VARCHAR2 DEFAULT NULL,
    p_redirect_uri         IN VARCHAR2 DEFAULT NULL,
    p_support_email        IN VARCHAR2 DEFAULT NULL,
    p_support_uri          IN VARCHAR2 DEFAULT NULL,
    p_privilege_names      IN VARCHAR2,
    p_token_duration       IN NUMBER DEFAULT NULL,
    p_refresh_duration     IN NUMBER DEFAULT NULL,
    p_code_duration        IN NUMBER DEFAULT NULL);

説明

既存のクライアントをこのスキーマにインポートし、識別子およびオプションでシークレットを保持します。シークレットが指定されていない場合は、新しいシークレットが生成されます。

パラメータ

p_name

Three-Legged OAuthの承認フェーズでエンド・ユーザーに表示されるクライアントの名前。名前は一意にする必要があります。

p_client_id

一意のクライアント識別子。

p_client_secret

オプションのパラメータ。指定しない場合、ランダムなシークレットが生成されます。

p_grant_type

値は、authorization_codeimplicitまたはclient_credentialsのいずれかである必要があります。

p_owner

クライアント・アプリケーションを所有するパーティの名前です。

p_description

クライアントの目的の説明。Three-Legged OAuthの承認フェーズでエンド・ユーザーに表示されます。p_grant_type値がclient_credentialsの場合、nullにできます。それ以外の場合は、nullにできません。

p_origins_allowed

URLの接頭辞のカンマ区切りリスト。

p_redirect_uri

OAuthアクセス・トークンまたはエラーが含まれるリダイレクトが送信されるクライアント制御URI。p_grant_typeの値がclient_credentialsの場合、nullにできます。それ以外の場合は、nullにできません。

p_support_email

エンド・ユーザーがサポートを得るためにクライアントに連絡できる電子メールです。

p_support_uri

エンド・ユーザーがサポートを得るためにクライアントに連絡できるURIです。

URIの例: http://www.myclientdomain.com/support/

p_privilege_names

クライアントがアクセスするカンマ区切りの権限のリストです。

p_token_duration

アクセス・トークンの期間(秒単位)。NULL期間はORDSインスタンスの値にフォールバックします。デフォルトでは、プロパティを使用して設定されるか、3600秒に設定されます。

p_refresh_duration

リフレッシュ・トークンの期間(秒単位)。NULL期間はORDSインスタンスの値にフォールバックします。デフォルトでは、プロパティを使用して設定されるか、86400秒に設定されます。

p_code_duration

コード・トークンの期間(秒単位)は、grant_type値がauthorization codeの場合にのみ適用されます。値がNULLに設定されている場合、またはgrant_typeの値がauthorization_codeでない場合、存続期間はORDSインスタンスで定義されている期間になります。デフォルトの値は300です。

使用上のノート

操作を有効にするには、このプロシージャを呼び出した後でCOMMIT文を使用します。

次の例では、カスタム期間またはオリジンなしでOAuthクライアントをインポートします:

BEGIN
  OAUTH.IMPORT_CLIENT(
      p_name                  => 'CLIENT_TEST',
      p_client_id             => 'awVMtPlqullIqPXhAwh4zA..',
      p_grant_type            => 'authorization_code',
      p_owner                 => 'RESTEASY',
      p_description           => 'This is a test description.',
      p_origins_allowed       => NULL,
      p_redirect_uri          => 'https://example.org/my_redirect/',
      p_support_email         => 'test@example.org',
      p_support_uri           => 'https://example.org/help/',
      p_privilege_names       => 'MyPrivilege');

  COMMIT;
END;
/