セキュリティ

これらは、YAMLベースのダイアログ・フロー・エディタの「セキュリティ」カテゴリで使用可能なコンポーネントです。

System.OAuth2Client

ノート

このトピックでは、このコンポーネントをYAMLモードで使用する方法について説明します。ビジュアル・フロー・デザイナでの使用方法の詳細は、OAuth 2.0クライアントを参照してください。

このコンポーネントを使用して、権限付与タイプがクライアント資格証明のOAuth2アクセス・トークンを取得します。つまり、これを使用して、ユーザーの名前やパスワードではなく、クライアントの資格証明に基づいたアクセス・トークンを取得します。このコンポーネントを使用して、Oracle Identity Cloud ServiceまたはOracle Access Manager (OAM)によって保護されているクライアント・リソースへのアクセスを可能にするトークンを取得できます。

ユーザーのかわりにリソースにアクセスする必要がある場合は、System.OAuth2AccountLinkおよびSystem.OAuthAccountLinkを参照してください。

このコンポーネントをスキルで使用する前に、次のタスクを実行する必要があります:

  1. まだ登録されていない場合は、アイデンティティ・プロバイダ登録の説明に従って、クライアントをアイデンティティ・プロバイダに登録します。
  2. 認証サービスの説明に従って、アイデンティティ・プロバイダのクライアント資格証明認証サービスを追加します。
プロパティ 説明 必須?
authenticationService OAuth2アイデンティティ・プロバイダの認証サービスUIで作成したクライアント資格証明サービスの名前。 はい
accessTokenVariableName アクセス・トークンを格納する変数を指定します。contextノードで、変数、文字列またはサポートされている別の変数タイプとして宣言できます。ユーザー・スコープ変数にすることもできます。例: user.accessToken はい

このコンポーネントにはアクションはありません。発生する可能性のあるシステムの問題に対処するには、そのようなエラーを処理できる状態に移行する次の遷移を追加します。

次に、このコンポーネントを使用する状態の例を示します:

  getAccessToken:
    component: "System.OAuth2Client"
    properties:
      authenticationService: "myAuthenticationService"
      accessTokenVariableName: "myAuthServiceToken"
    transitions:
      next: "next"
      error: "error" # handle auth service issues

System.OAuth2AccountLink

ノート

このトピックでは、このコンポーネントをYAMLモードで使用する方法について説明します。ビジュアル・フロー・デザイナでの使用方法の詳細は、OAuth 2.0アカウント・リンクを参照してください。

このコンポーネントを使用して、OCI IAM、Oracle Access Manager (OAM)、Microsoft IDプラットフォームまたはGoogle OAuth 2.0認可によって保護されているリソース用のOAuth2ユーザー・アクセス・トークン(権限付与タイプが認可コード)を取得します。このコンポーネントは、3-legged OAuth2フローのすべてのステップを完了し、OAuth2アクセス・トークンを返します。

requiresAuthorization設定を使用すると、起動する前に認可が必要なのはどの状態かを指定することができます。認可が必要な状態では、ユーザーがまだ認可されていない場合、System.OAuth2AccountLink状態が起動され、その後、認可が必要な状態がフローによって起動されます。この機能の使用方法は、グループ・チャットでのユーザー認証を参照してください(これは、グループ・チャットだけでなく、すべてのタイプのチャットで機能します)。

クライアント・リソースにアクセスするために権限付与タイプがクライアント資格証明のアクセス・トークンを取得する必要がある場合は、System.OAuth2Clientを参照してください。

このコンポーネントをスキルで使用する前に、次のタスクを実行する必要があります:

  1. まだ登録されていない場合は、アイデンティティ・プロバイダ登録の説明に従って、クライアントをアイデンティティ・プロバイダに登録します。
  2. 認証サービスの説明に従って、アイデンティティ・プロバイダの認証サービスを追加します。

一部のアイデンティティ・プロバイダは、リフレッシュ・トークンを発行します。このコンポーネントを使用すると、デジタル・アシスタントにより、認証サービスに対して指定されている保持期間の間、リフレッシュ・トークンが格納されます。デジタル・アシスタント・バックエンドはリフレッシュ・トークンを使用して(使用可能な場合)、ユーザーが再度サインインしなくても新しいアクセス・トークンを取得できます。

ヒント:

プラットフォーム・バージョンが21.04以降のスキルでは、cancelLabellinkLabelおよびpromptプロパティのデフォルト値はスキルのリソース・バンドルに格納されます。デフォルトを変更するには、スキルの「リソース・バンドル」ページを開き、「リソース・バンドル」アイコンをクリックして「構成」タブを選択し、OAuth2AccountLink - <property name>キーのメッセージを変更します。スキルのリソース・バンドルを使用してデフォルトを変更する場合は、コンポーネントにプロパティを含める必要はありません(デフォルトをオーバーライドする場合を除きます)。

構成バンドルの「その他 - oauthCancelPrompt」および「その他 - oauthSuccessPrompt」のメッセージも変更できます。

プロパティ 説明 必須?
accessTokenVariableName アクセス・トークンを格納する変数を指定します。変数がuser.accessTokenなどユーザー・スコープの場合は、スキル間で共有できます。

デフォルトはaccessTokenです。

いいえ
authenticatedUserVariableName 認証済ユーザー名(アイデンティティ・プロバイダに既知の名前)を格納する変数を指定します。変数がuser.authenticatedUserなどユーザー・スコープの場合は、スキル間で共有できます。

デフォルトはauthenticatedUserです。

いいえ
authenticationService OAuth2アイデンティティ・プロバイダの認証サービスUIで作成した認可コード・サービスの名前。 はい
autoNumberPostbackActions trueに設定した場合、このオプションによって、サーバー側のポストバック・アクションである取消オプションの先頭に番号が付けられます。アクセス・トークンを取得するオプションには、先頭に番号が付けられません。これはURLアクションであるためです。URLアクションは先頭に連番を付けられないクライアント側のアクションです。

このオプションをtrueに設定していない場合でも、デジタル・アシスタントの「ポストバック・アクションでの自動採番の有効化」構成がtrueに設定されている場合は、ポストバック・アクションに自動採番を適用できます。チャネル固有の自動採番は、デジタル・アシスタントに登録されているどのスキル・ボットにも適用できます:

${(system.message.channelConversation.channelType=='twilio')?then('true','false')}

「YAMLダイアログ・フローのテキストのみのチャネルの自動番号付け」を参照してください

デジタル・アシスタントの自動採番

いいえ
cancelLabel 認証ダイアログを呼び出さずに状態を終了するためにユーザーがクリックできるボタンのラベルをオーバーライドする場合に使用します。デフォルトのラベルはCancelです。 いいえ
enableSingleSignOn (MS Teamsのみ) Microsoft Teamsシングル・サインオン(SSO)を設定した場合は、これをtrueに設定して、MS Teamsにすでにサインインしているユーザーがスキルにサインインしなくて済むようにできます。デフォルトはfalseです。Microsoft TeamsチャネルのSSO構成を参照してください。

SSOのカレンダ・コンポーネントでの使用はサポートされていません。

いいえ
footerText ログイン・オプションおよび取消オプションの下にテキストを追加することで、ログイン・ダイアログを拡張します。フッターで説明されているように、FreeMarker式を使用して、テキストのみのチャネルのフッター・テキストに条件を設定できます。 いいえ
linkLabel 認証ダイアログを呼び出すためにユーザーがクリックできるボタンのラベルをオーバーライドする場合に使用します。デフォルトのラベルはGet an access tokenです。 いいえ
prompt デフォルトのPlease sign inのかわりにユーザーに入力を求めるために使用する文字列。 いいえ
showCancelOption (オプション)「Cancel」ボタンを表示するかどうかを指定できます。デフォルトでは、このオプションはtrueに設定されています。つまり、「Cancel」ボタンが表示されます。SMSチャネルなど、場合によってはこのボタンを表示しないこともあります。そのような動作は、次のような式を使用して構成できます:
${(system.message.channelConversation.channelType=='twilio')?then('false','true')}
いいえ
translate このオプションのブール・プロパティを使用して、autoTranslateコンテキスト変数のブール値をオーバーライドします。このコンテキスト変数が明示的にtrueに設定されていないかぎり、autoTranslatefalse (自動翻訳から除外)であることに注意してください。 いいえ
updateUserProfile アイデンティティ・プロバイダがOCI IAMアイデンティティ・ドメインで、セッション中にIAMからユーザーのプロファイルを格納する場合は、このプロパティをtrueに設定します。ユーザーが認証を要求されたときに、このプロパティがtrueに設定されている場合、コンポーネントはアイデンティティ・プロバイダからユーザー・プロファイル・データをフェッチし、結果をuserProfile.<authorization service>マップに設定しようとします。デフォルトでは、この値はfalseです。Store User Profile for the Duration of the Sessionを参照してください。 いいえ

このコンポーネントは、次のアクションを返すことができます:

アクション 説明
fail ユーザーが取消しボタンをクリックしました。
pass アクセス・トークンが正常に取得されました。
textReceived ユーザーが、取消しボタンをクリックするか正常に認証するかわりに、テキストを入力しました。

ダイアログ・エンジンがコンポーネントを検出すると、スキル・ボットによって「アクセス・トークンの取得」「取消」という2つのリンクがユーザーに表示されます(linkLabelcancelLabelを使用してリンク・テキストを変更できます)。


oauth2accountlinksignin1.pngの説明が続きます
図oauth2accountlinksignin1.pngの説明

アクセス・トークンを取得するリンクをユーザーがクリックした場合は、認証サービスで指定されたアイデンティティ・プロバイダのログイン・ページまたは認証ダイアログを表示します。ログインが成功すると、アクセス・トークンを取得し、accessTokenVariableNameおよびauthenticatedUserVariableNameで指定された変数の値を設定し、passアクションによって指定された状態(またはpassアクションがない場合は次の状態)に移行します。ユーザーが取り消した場合、ポストバック・アクションはfailに設定されます。ユーザーがテキストを入力した場合、textReceivedアクションを返します。


oauth2accountlinksignin2.pngの説明が続きます
図oauth2accountlinksignin2.pngの説明

前述のように、状態にrequiresAuthorizationを設定すると、ユーザーが認可されてから状態のコンポーネントを起動するようになります。ユーザーがまだ認可されていない場合、ダイアログがdefaultTransitionssystem.authorizeUserアクションを起動します。次の例は、次のとおりです:

main: true
name: RequiresAuthorizationExample
context:
  variables:
    iResult: "nlpresult"

defaultTransitions:
  actions:
    system.authorizeUser: "login"

states:
  intent:
    component: "System.Intent"
    properties:
      variable: "iResult"
    transitions:
      actions:
        reg.general.showPasscode: "showPasscode"
        reg.general.showPhoneNumber: "showPhoneNumber"
        unresolvedIntent: "handleUnresolved"        

  showPasscode:
    component: "System.Output"
    requiresAuthorization: true
    properties:
      text: "XYZABC123"
    transitions:
      return: "done"          
       
  showPhoneNumber:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "555-1212"
    transitions:
      return: "done"
       
  handleUnresolved:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "You can ask for my phone number or ask for the passcode."
    transitions:
      return: "done"
         
  login:
    component: "System.OAuth2AccountLink"
    properties:
      prompt: "${profile.firstName}, please login"
      authenticationService: "MyAuthenticationService"
      accessTokenVariableName: "user.accessToken"
      authenticatedUserVariableName: "user.authenticatedUserId"
    transitions:
      actions:
        pass : "${system.requestedState}"
        fail : "handleFailedLogin"
        textReceived: "intent"       

  handleFailedLogin:
    component: "System.Output"
    requiresAuthorization: false
    properties:
      text: "Sorry, you aren't authorized to do that"
    transitions:
      return: "done"     

セッション中のユーザー・プロファイルの格納

スキルでユーザーのOCI IAMアイデンティティ・ドメイン・プロファイルに基づいてダイアログ・フローを制御する必要がある場合は、System.OAuth2AccountLinkコンポーネントのupdateUserProfileプロパティをtrueに設定します。これにより、IAMユーザーのプロファイル情報をuserProfile.<authorization service>マップから取得できます。

updateUserProfiletrueに設定されている場合、System.OAuth2AccountLinkコンポーネントはIAMからユーザー・プロファイルをフェッチし、データをuserProfile.<authorization service>マップに格納します。

たとえば、ダイアログ・フローの状態が次のとおりだとします:

  oauth2AccountLink:
    component: "System.OAuth2AccountLink"
    properties:
      authenticationService: "myIAMProvider"
      authenticatedUserVariableName: "user.authuser"
      accessTokenVariableName: "user.accessToken"
      updateUserProfile: true
    transitions:
      actions:
        pass: "askGreeting"
        fail: "fail"
        textReceived: "authTextReceived"

ユーザーがサインインすると、次の例に示すように、IAMのユーザーのプロファイルを使用してuserProfile.myIAMProviderオブジェクトがシードされます。

"userProfile.myIAMProvider": {
  "sub": "myUsername",
  "website": "",
  "birthdate": "",
  "email_verified": false,
  "gender": "",
  "updated_at": 1584561296,
  "name": "First Last",
  "preferred_username": "myUsername",
  "given_name": "First",
  "family_name": "Last",
  "email": "first.last@oracle.com",
  "appRoles": [
    {
      "appName": "some-instance-1_APPID",
      "displayName": "RoleName",
      "appID": "1234567abcd12345",
      "name": "some-instance-1_APPID",
      "adminRole": false,
      "legacyName": "some-instance-1.RoleName",
      "id": "1234567abcdefg",
      "$ref": "http://some/path/v1/AppRoles/a111234567abcdefg"
    }
  ]
}

複数の認証サービスの処理

スキル・ボットが複数の認証サービスからのアクセス・トークンを必要とする場合、次の例に示すように、このコンポーネントの用途ごとに一意のアクセス・トークンおよび認証されたユーザーの変数名を指定できます:

...
states:
# First Authentication Service
  getAccessToken1:
    component: "System.OAuth2AccountLink"
    properties:
      authenticationService: "AuthService1"
      accessTokenVariableName: "user.accessToken1"
      authenticatedUserVariableName: "user.authenticatedUser1"
    transitions:
      actions:
        pass: "getAccessToken2"
        textReceived: "handleAuthTextResponse"
        fail: "authCancelled"
# Second Authentication Service
  getAccessToken2:
    component: "System.OAuth2AccountLink"
    properties:
      authenticationService: "AuthService2"
      accessTokenVariableName: "user.accessToken2"
      authenticatedUserVariableName: "user.authenticatedUser2"
    transitions:
      actions:
        pass:  "getBankUserProfile"
        textReceived: "handleAuthTextResponse"
        fail: "authCancelled"
...

System.OAuth2ResetTokens

ノート

このトピックでは、このコンポーネントをYAMLモードで使用する方法について説明します。ビジュアル・フロー・デザイナでの使用方法の詳細は、OAuth 2.0トークンのリセットを参照してください。

このコンポーネントを使用して、認証サービスが示すアイデンティティ・プロバイダから、ログイン・ユーザーのすべてのリフレッシュ・トークンおよびユーザー・アクセス・トークンを取り消します。また、リフレッシュ・トークンをデータベースから削除します。このコンポーネントを使用するには、認証サービスUIでアイデンティティ・プロバイダのリフレッシュ・トークンの取消URLを指定する必要があります。

スキルには、同じ認証サービスのOAuth2AccountLinkコンポーネントを使用する状態が含まれている必要があり、System.OAuth2ResetTokensコンポーネントを使用する状態の前に呼び出される必要があります。

プロパティ 説明 必須?
authenticationService OAuth2アイデンティティ・プロバイダの認証サービスUIで作成したサービスの名前。このサービスには、有効なリフレッシュ・トークンの取消URLが必要です。 はい

このコンポーネントは、次のアクションを返すことができます:

アクション 説明
noRefreshTokenFound 認証サービスにユーザーのリフレッシュ・トークンがありません。

System.OAuthAccountLink

ノート

このトピックでは、このコンポーネントをYAMLモードで使用する方法について説明します。ビジュアル・フロー・デザイナでの使用方法の詳細は、OAuth「アカウント・リンク」を参照してください。

このコンポーネントを使用して、LinkedIn、Twitter、Google、Microsoftなど、認可コード権限付与フローによって保護されているサービスの認可コードを取得します。スキルのカスタム・コンポーネントは、認可コードをアクセス・トークンと交換でき、これを使用して終了サービスを起動します。

最初に、コンポーネントによってアイデンティティ・プロバイダのログイン・ページがユーザーに表示されます。ログインの成功後、コンポーネントによって認可コードが変数で返され、それを使用して認可コードをカスタム・コンポーネントに渡します。カスタム・コンポーネントAPIによって、認可コード、クライアントIDおよびクライアント・シークレットがOAuth2ユーザー・アクセス・トークンと交換される必要があります。

requiresAuthorization設定を使用すると、起動する前に認可が必要なのはどの状態かを指定することができます。認可が必要な状態では、ユーザーがまだ認可されていない場合、System.OAuthAccountLink状態が起動され、その後、認可が必要な状態がフローによって起動されます。この機能の使用方法は、グループ・チャットでのユーザー認証を参照してください(これは、グループ・チャットだけでなく、すべてのタイプのチャットで機能します)。

ヒント:

プラットフォーム・バージョンが21.04以降のスキルでは、cancelLabellinkLabelおよびpromptプロパティのデフォルト値はスキルのリソース・バンドルに格納されます。デフォルトを変更するには、スキルの「リソース・バンドル」ページを開き、「リソース・バンドル」アイコンをクリックして「構成」タブを選択し、OAuthAccountLink - <property name>キーのメッセージを変更します。スキルのリソース・バンドルを使用してデフォルトを変更する場合は、コンポーネントにプロパティを含める必要はありません(デフォルトをオーバーライドする場合を除きます)。

構成バンドルの「その他 - oauthCancelPrompt」および「その他 - oauthSuccessPrompt」のメッセージも変更できます。

プロパティ 説明 必須?
authorizeURL ログインURL。authorizeURLプロパティでは、このURLの構成方法について説明しています。 はい
autoNumberPostbackActions trueに設定した場合、このオプションによって、取消オプションの先頭に番号が付けられます。このオプションをtrueに設定していない場合でも、デジタル・アシスタントの「ポストバック・アクションでの自動採番の有効化」構成がtrueに設定されている場合は、リスト・アイテムに自動採番を適用できます。チャネル固有の自動採番は、デジタル・アシスタントに登録されているどのスキル・ボットにも適用できます:
${(system.message.channelConversation.channelType=='twilio')?then('true','false')}
いいえ
cancelLabel 認証ダイアログを呼び出さずに状態を終了するためにユーザーがクリックできるボタンのラベルをオーバーライドする場合に使用します。デフォルトのラベルはCancelです。 いいえ
footerText ログイン・オプションおよび取消オプションの下にテキストを追加することで、ログイン・ダイアログを拡張します。フッターで説明されているように、FreeMarker式を使用して、テキストのみのチャネルのフッター・テキストに条件を設定できます。 いいえ
linkLabel 認証ダイアログを呼び出すためにユーザーがクリックできるボタンのラベルをオーバーライドする場合に使用します。デフォルトのラベルはLog Inです。 いいえ
prompt ユーザーにサインインを求めるために使用する文字列。 はい
showCancelOption (オプション)「Cancel」ボタンを表示するかどうかを指定できます。デフォルトでは、このオプションはtrueに設定されています。つまり、「Cancel」ボタンが表示されます。SMSチャネルなど、場合によってはこのボタンを表示しないこともあります。そのような動作は、次のような式を使用して構成できます:
${(system.message.channelConversation.channelType=='twilio')?then('false','true')}
はい
translate このオプションのブール・プロパティを使用して、autoTranslateコンテキスト変数のブール値をオーバーライドします。このコンテキスト変数が明示的にtrueに設定されていないかぎり、autoTranslatefalse (自動翻訳から除外)であることに注意してください。 いいえ
variable 認可コードを格納する変数を指定します。contextノードで、変数、文字列またはサポートされている別の変数タイプとして宣言できます。ユーザー変数にすることもできます。 はい

このコンポーネントは、次のアクションを返すことができます:

アクション 説明
fail ユーザーが取消しボタンをクリックしました。
pass 認可コードが正常に取得されました。
textReceived ユーザーが、取消しボタンをクリックするか正常に認証するかわりに、テキストを入力しました。

この例は、System.OAuthAccountLinkコンポーネントに対して定義する必要のある必須プロパティを示しています: promptはログイン・メッセージを指定し、variableは認可コードの格納場所をコンポーネントに指示し、authorizeURLはプロバイダのOAuth URLと認可コードを受け取るリダイレクトURLの両方を定義します。

login:
  component: "System.OAuthAccountLink"
  properties:
    prompt: "Please login now."
    linkLabel: "login"
    cancelLabel: "cancel"
    authorizeURL: "https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=75k0vq4&scope=r_basicprofile&redirect_uri=https%3A%2F%2FmyBotsinstance%2Fconnectors%2Fv2%2Fcallback"
    variable: "authCode"
  transitions:
      next: getBankUserProfile
      actions:
        textReceived: handleAuthTextResponse
        fail: authCancelled

ダイアログ・エンジンがこのコンポーネントを検出すると、スキル・ボットが2つのリンク(LoginCancel)を使用してユーザーに入力を求めます。

このコンポーネントから遷移する方法はいくつかあります:

  • ユーザーが取消しボタンをクリックすると、コンポーネントはfailアクションによって指定された状態に遷移します。

  • ユーザーはボタンをクリックしませんが、かわりにテキストを入力します。コンポーネントはtextReceivedアクションによって指定された状態に遷移します。

  • ユーザーがログイン・リンクをクリックすると、次の例に示すように、チャネルによってアイデンティティ・プロバイダのログイン・ページまたは認証ダイアログがWebビューとしてレンダリングされます。認可が成功すると、コンポーネントはpassアクションによって指定された状態(または、passアクションがない場合は次の状態)に遷移します。これは通常、認可コードをアクセス・トークンと交換するカスタム・コンポーネントをコールします。

テスト・ウィンドウでWebビューがレンダリングされない場合は、リンク・テキストを切り取ってブラウザに貼り付けてください。

authorizeURLプロパティ

このプロパティを構成するには、アイデンティティ・プロバイダのURL (例にあるhttps://www.linkedin.com/oauth/v2/authorizationなど)から開始します。次に、このURLに次のOAuthパラメータを追加します:

  1. response_type: スキル・ボットでは認可コードを予期しているため、codeに設定します。

  2. client_id: アプリケーションをアイデンティティ・プロバイダに登録したときに取得したAPIキー値。

  3. scope: ユーザーのかわりにリソースにアクセスするための権限のリスト。これらは、アプリケーションをプロバイダに登録するときに設定する権限です。プロバイダによって異なる場合があります: LinkedInの場合はr_basicprofile (例に示されています)やr_emailadressなどであり、Microsoftの場合はopenid emailおよびopenid profileを使用して定義されます。

  4. redirect_uri: これは、アプリケーションをアイデンティティ・プロバイダに登録するために使用したリダイレクトURIであり、ユーザーのリダイレクト先をプロバイダに示します。このパラメータは、connectors/v2/callbackが追加されたデジタル・アシスタント・サービス・ホスト名であり、認可コードを受け取り、それをアクティブ・チャネルに関連付けるエンドポイントです。redirect_uriプロパティは、チャネルの作成時に生成されるWebフックURLに基づきます。チャネルとはを参照してください

    redirect_uriに対して入力する値は、アプリケーションを登録したときに指定したリダイレクトURIと厳密に一致するようにしてください。どちらの場合も、URIにconnectors/v2/callbackを追加する必要があります。

ノート

インスタンスがOracle Cloud Platformにプロビジョニングされている場合(バージョン19.4.1のすべてのインスタンスと同様に)、v2ではなくv1を使用します。