セキュリティ
これらは、YAMLベースのダイアログ・フロー・エディタの「セキュリティ」カテゴリで使用可能なコンポーネントです。
System.OAuth2Client
このコンポーネントを使用して、権限付与タイプがクライアント資格証明のOAuth2アクセス・トークンを取得します。つまり、これを使用して、ユーザーの名前やパスワードではなく、クライアントの資格証明に基づいたアクセス・トークンを取得します。このコンポーネントを使用して、Oracle Identity Cloud ServiceまたはOracle Access Manager (OAM)によって保護されているクライアント・リソースへのアクセスを可能にするトークンを取得できます。
ユーザーのかわりにリソースにアクセスする必要がある場合は、System.OAuth2AccountLinkおよびSystem.OAuthAccountLinkを参照してください。
このコンポーネントをスキルで使用する前に、次のタスクを実行する必要があります:
- まだ登録されていない場合は、アイデンティティ・プロバイダ登録の説明に従って、クライアントをアイデンティティ・プロバイダに登録します。
- 認証サービスの説明に従って、アイデンティティ・プロバイダのクライアント資格証明認証サービスを追加します。
プロパティ | 説明 | 必須? |
---|---|---|
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
このコンポーネントを使用して、OCI IAM、Oracle Access Manager (OAM)、Microsoft IDプラットフォームまたはGoogle OAuth 2.0認可によって保護されているリソース用のOAuth2ユーザー・アクセス・トークン(権限付与タイプが認可コード)を取得します。このコンポーネントは、3-legged OAuth2フローのすべてのステップを完了し、OAuth2アクセス・トークンを返します。
requiresAuthorization
設定を使用すると、起動する前に認可が必要なのはどの状態かを指定することができます。認可が必要な状態では、ユーザーがまだ認可されていない場合、System.OAuth2AccountLink
状態が起動され、その後、認可が必要な状態がフローによって起動されます。この機能の使用方法は、グループ・チャットでのユーザー認証を参照してください(これは、グループ・チャットだけでなく、すべてのタイプのチャットで機能します)。
クライアント・リソースにアクセスするために権限付与タイプがクライアント資格証明のアクセス・トークンを取得する必要がある場合は、System.OAuth2Clientを参照してください。
このコンポーネントをスキルで使用する前に、次のタスクを実行する必要があります:
- まだ登録されていない場合は、アイデンティティ・プロバイダ登録の説明に従って、クライアントをアイデンティティ・プロバイダに登録します。
- 認証サービスの説明に従って、アイデンティティ・プロバイダの認証サービスを追加します。
一部のアイデンティティ・プロバイダは、リフレッシュ・トークンを発行します。このコンポーネントを使用すると、デジタル・アシスタントにより、認証サービスに対して指定されている保持期間の間、リフレッシュ・トークンが格納されます。デジタル・アシスタント・バックエンドはリフレッシュ・トークンを使用して(使用可能な場合)、ユーザーが再度サインインしなくても新しいアクセス・トークンを取得できます。
ヒント:
プラットフォーム・バージョンが21.04以降のスキルでは、cancelLabel
、linkLabel
およびprompt
プロパティのデフォルト値はスキルのリソース・バンドルに格納されます。デフォルトを変更するには、スキルの「リソース・バンドル」ページを開き、
構成バンドルの「その他 - oauthCancelPrompt」および「その他 - oauthSuccessPrompt」のメッセージも変更できます。
プロパティ | 説明 | 必須? |
---|---|---|
accessTokenVariableName
|
アクセス・トークンを格納する変数を指定します。変数がuser.accessToken などユーザー・スコープの場合は、スキル間で共有できます。
デフォルトは |
いいえ |
authenticatedUserVariableName
|
認証済ユーザー名(アイデンティティ・プロバイダに既知の名前)を格納する変数を指定します。変数がuser.authenticatedUser などユーザー・スコープの場合は、スキル間で共有できます。
デフォルトは |
いいえ |
authenticationService
|
OAuth2アイデンティティ・プロバイダの認証サービスUIで作成した認可コード・サービスの名前。 | はい |
autoNumberPostbackActions
|
true に設定した場合、このオプションによって、サーバー側のポストバック・アクションである取消オプションの先頭に番号が付けられます。アクセス・トークンを取得するオプションには、先頭に番号が付けられません。これはURLアクションであるためです。URLアクションは先頭に連番を付けられないクライアント側のアクションです。
このオプションを
「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チャネルなど、場合によってはこのボタンを表示しないこともあります。そのような動作は、次のような式を使用して構成できます:
|
いいえ |
translate
|
このオプションのブール・プロパティを使用して、autoTranslate コンテキスト変数のブール値をオーバーライドします。このコンテキスト変数が明示的にtrue に設定されていないかぎり、autoTranslate はfalse (自動翻訳から除外)であることに注意してください。
|
いいえ |
updateUserProfile
|
アイデンティティ・プロバイダがOCI IAMアイデンティティ・ドメインで、セッション中にIAMからユーザーのプロファイルを格納する場合は、このプロパティをtrue に設定します。ユーザーが認証を要求されたときに、このプロパティがtrue に設定されている場合、コンポーネントはアイデンティティ・プロバイダからユーザー・プロファイル・データをフェッチし、結果をuserProfile.<authorization service> マップに設定しようとします。デフォルトでは、この値はfalse です。Store User Profile for the Duration of the Sessionを参照してください。
|
いいえ |
このコンポーネントは、次のアクションを返すことができます:
アクション | 説明 |
---|---|
fail
|
ユーザーが取消しボタンをクリックしました。 |
pass
|
アクセス・トークンが正常に取得されました。 |
textReceived
|
ユーザーが、取消しボタンをクリックするか正常に認証するかわりに、テキストを入力しました。 |
ダイアログ・エンジンがコンポーネントを検出すると、スキル・ボットによって「アクセス・トークンの取得」と「取消」という2つのリンクがユーザーに表示されます(linkLabel
とcancelLabel
を使用してリンク・テキストを変更できます)。

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

図oauth2accountlinksignin2.pngの説明
前述のように、状態にrequiresAuthorization
を設定すると、ユーザーが認可されてから状態のコンポーネントを起動するようになります。ユーザーがまだ認可されていない場合、ダイアログがdefaultTransitions
のsystem.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>
マップから取得できます。
updateUserProfile
がtrue
に設定されている場合、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
このコンポーネントを使用して、認証サービスが示すアイデンティティ・プロバイダから、ログイン・ユーザーのすべてのリフレッシュ・トークンおよびユーザー・アクセス・トークンを取り消します。また、リフレッシュ・トークンをデータベースから削除します。このコンポーネントを使用するには、認証サービスUIでアイデンティティ・プロバイダのリフレッシュ・トークンの取消URLを指定する必要があります。
スキルには、同じ認証サービスのOAuth2AccountLink
コンポーネントを使用する状態が含まれている必要があり、System.OAuth2ResetTokens
コンポーネントを使用する状態の前に呼び出される必要があります。
プロパティ | 説明 | 必須? |
---|---|---|
authenticationService |
OAuth2アイデンティティ・プロバイダの認証サービスUIで作成したサービスの名前。このサービスには、有効なリフレッシュ・トークンの取消URLが必要です。 | はい |
このコンポーネントは、次のアクションを返すことができます:
アクション | 説明 |
---|---|
noRefreshTokenFound |
認証サービスにユーザーのリフレッシュ・トークンがありません。 |
System.OAuthAccountLink
このコンポーネントを使用して、LinkedIn、Twitter、Google、Microsoftなど、認可コード権限付与フローによって保護されているサービスの認可コードを取得します。スキルのカスタム・コンポーネントは、認可コードをアクセス・トークンと交換でき、これを使用して終了サービスを起動します。
最初に、コンポーネントによってアイデンティティ・プロバイダのログイン・ページがユーザーに表示されます。ログインの成功後、コンポーネントによって認可コードが変数で返され、それを使用して認可コードをカスタム・コンポーネントに渡します。カスタム・コンポーネントAPIによって、認可コード、クライアントIDおよびクライアント・シークレットがOAuth2ユーザー・アクセス・トークンと交換される必要があります。
requiresAuthorization
設定を使用すると、起動する前に認可が必要なのはどの状態かを指定することができます。認可が必要な状態では、ユーザーがまだ認可されていない場合、System.OAuthAccountLink
状態が起動され、その後、認可が必要な状態がフローによって起動されます。この機能の使用方法は、グループ・チャットでのユーザー認証を参照してください(これは、グループ・チャットだけでなく、すべてのタイプのチャットで機能します)。
ヒント:
プラットフォーム・バージョンが21.04以降のスキルでは、cancelLabel
、linkLabel
およびprompt
プロパティのデフォルト値はスキルのリソース・バンドルに格納されます。デフォルトを変更するには、スキルの「リソース・バンドル」ページを開き、
構成バンドルの「その他 - oauthCancelPrompt」および「その他 - oauthSuccessPrompt」のメッセージも変更できます。
プロパティ | 説明 | 必須? |
---|---|---|
authorizeURL |
ログインURL。authorizeURLプロパティでは、このURLの構成方法について説明しています。 | はい |
autoNumberPostbackActions |
true に設定した場合、このオプションによって、取消オプションの先頭に番号が付けられます。このオプションをtrue に設定していない場合でも、デジタル・アシスタントの「ポストバック・アクションでの自動採番の有効化」構成がtrue に設定されている場合は、リスト・アイテムに自動採番を適用できます。チャネル固有の自動採番は、デジタル・アシスタントに登録されているどのスキル・ボットにも適用できます:
|
いいえ |
cancelLabel |
認証ダイアログを呼び出さずに状態を終了するためにユーザーがクリックできるボタンのラベルをオーバーライドする場合に使用します。デフォルトのラベルはCancel です。
|
いいえ |
footerText |
ログイン・オプションおよび取消オプションの下にテキストを追加することで、ログイン・ダイアログを拡張します。フッターで説明されているように、FreeMarker式を使用して、テキストのみのチャネルのフッター・テキストに条件を設定できます。 | いいえ |
linkLabel |
認証ダイアログを呼び出すためにユーザーがクリックできるボタンのラベルをオーバーライドする場合に使用します。デフォルトのラベルはLog In です。
|
いいえ |
prompt |
ユーザーにサインインを求めるために使用する文字列。 | はい |
showCancelOption |
(オプション)「Cancel」ボタンを表示するかどうかを指定できます。デフォルトでは、このオプションはtrue に設定されています。つまり、「Cancel」ボタンが表示されます。SMSチャネルなど、場合によってはこのボタンを表示しないこともあります。そのような動作は、次のような式を使用して構成できます:
|
はい |
translate |
このオプションのブール・プロパティを使用して、autoTranslate コンテキスト変数のブール値をオーバーライドします。このコンテキスト変数が明示的にtrue に設定されていないかぎり、autoTranslate はfalse (自動翻訳から除外)であることに注意してください。
|
いいえ |
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つのリンク(LoginとCancel)を使用してユーザーに入力を求めます。
このコンポーネントから遷移する方法はいくつかあります:
-
ユーザーが取消しボタンをクリックすると、コンポーネントは
fail
アクションによって指定された状態に遷移します。 -
ユーザーはボタンをクリックしませんが、かわりにテキストを入力します。コンポーネントは
textReceived
アクションによって指定された状態に遷移します。 -
ユーザーがログイン・リンクをクリックすると、次の例に示すように、チャネルによってアイデンティティ・プロバイダのログイン・ページまたは認証ダイアログがWebビューとしてレンダリングされます。認可が成功すると、コンポーネントは
pass
アクションによって指定された状態(または、pass
アクションがない場合は次の状態)に遷移します。これは通常、認可コードをアクセス・トークンと交換するカスタム・コンポーネントをコールします。
テスト・ウィンドウでWebビューがレンダリングされない場合は、リンク・テキストを切り取ってブラウザに貼り付けてください。
authorizeURLプロパティ
このプロパティを構成するには、アイデンティティ・プロバイダのURL (例にあるhttps://www.linkedin.com/oauth/v2/authorization
など)から開始します。次に、このURLに次のOAuthパラメータを追加します:
-
response_type
: スキル・ボットでは認可コードを予期しているため、code
に設定します。 -
client_id
: アプリケーションをアイデンティティ・プロバイダに登録したときに取得したAPIキー値。 -
scope
: ユーザーのかわりにリソースにアクセスするための権限のリスト。これらは、アプリケーションをプロバイダに登録するときに設定する権限です。プロバイダによって異なる場合があります: LinkedInの場合はr_basicprofile
(例に示されています)やr_emailadress
などであり、Microsoftの場合はopenid email
およびopenid profile
を使用して定義されます。 -
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
を使用します。