アダプティブ カードユニバーサル アクションの SSO を有効にするコードを追加する
シングル サインオン (SSO) の認証手順は、Teams のボットの認証手順と似ています。 アダプティブ カード ユニバーサル アクションで SSO を実現する手順を次に示します。
注:
SSO フローを実装するには、アプリ マニフェストでボット用に宣言された 1 対 1 のチャットが必要です。 アプリ ユーザーがアダプティブ カード Action.Execute
プロトコルを介して SSO フローを呼び出すと、アプリ ユーザーがアプリをインストールしていない場合は、個人用スコープでアプリをインストールすることを許可するように求めるプロンプトが表示されます。
アクセス トークンを処理するコードを追加する
アクセス トークンを取得するために、Microsoft Entra IDでボットが構成されていることを確認します。 コードを更新して、ボットのアダプティブ カードユニバーサル アクションのアクセス トークンを処理できます。
キャッシュされたトークンがある場合、ボットは同じトークンを使用します。 使用可能なトークンがない場合、アダプティブ カードはボット サービスに呼び出し応答を送信します。これにより、SSO 操作を指定するためのtokenExchangeResource
を含む次の値を含む OAuth カードが送信されます。
{
"statusCode": 401,
"type": "application/vnd.microsoft.activity.loginRequest",
"value": {
"text": "Please sign-in",
"connectionName": "<configured-connection-name>",
"tokenExchangeResource": {
"id": "<unique-indentifier>",
"uri": "<application-or-resource-identifier>",
"providerId": "<optional-provider-identifier>"
},
"buttons": [
{
"title": "Sign-In",
"text": "Sign-In",
"type": "signin",
"value": "<sign-in-URL>"
}
]
}
}
ボット サービスは、tokenExchangeResource
値と Teams クライアント トークンを使用して、Microsoft Entra IDから代理トークンまたは交換可能なトークンを取得する Teams クライアントに呼び出し応答を配信します。
SSO は、無効な値、交換可能なトークンの取得エラー、値をサポートしていない場合など、何らかの理由で Teams クライアントがtokenExchangeResource
値を無視した場合Microsoft Entra ID失敗します。 次に、Teams クライアントによって、名目サインインまたは OAuth フローがトリガーされます。 OAuth フローが機能するように、応答にサインイン URL を指定することをお勧めします。
アクセス トークンを取得するための同意ダイアログ
アプリ ユーザーが初めてアダプティブ カードを使用する場合は、アプリが自分の ID を使用することに同意する必要があります。 次のダイアログが表示されます。
アプリ ユーザーが [表示と同意] を選択すると、既存のMicrosoft Entraアクセス許可同意ビューが表示され、すべてのアクセス許可が表示されます。 アプリ ユーザーは認証フローを続行できます。
トークンを受け取るコードを追加する
Teams クライアントは、次のようにトークンと共に元の
adaptiveCard/action
をボットに再度送信します。{ "type": "invoke", "name": "adaptiveCard/action" "value": { "action": { "id": "abc123", "type": "Action.Execute", "verb": "saveCommand", "data": { "firstName": "Jeff", "lastName": "Derstadt" } }, "authentication": { "id": "8769-xyz", "connectionName": "oauthConnection", "token": "...single sign-on token..." } } }
次のコード スニペットは、ボット サービスで呼び出しアクティビティを受信する方法を示しています。
protected override async Task<InvokeResponse> OnInvokeActivityAsync(ITurnContext<IInvokeActivity> turnContext, CancellationToken cancellationToken) { JObject value = JsonConvert.DeserializeObject<JObject> (turnContext.Activity.Value.ToString()); JObject authentication = null; if (value["authentication"] != null) { authentication = JsonConvert.DeserializeObject<JObject>(value["authentication"].ToString()); } }
Teams クライアントは、ボットに呼び出し要求を送信します。 ボットはアプリ ユーザーの同意を受け取り、その ID を使用して、ボット フレームワーク トークン サービスとMicrosoft Entra IDでトークン交換プロセスを支援します。 ボット フレームワーク トークン サービスは、アプリ ユーザーのアクセス トークンをボットに配信します。
値が正しくない場合、ボット サービスはアクセス トークンを無視します。
トークン交換の実行中にエラーが発生するボット サービスは、SSO 情報を含まないエラーまたは 2 番目のサインイン要求で応答する必要があります。 ボット サービスがエラーで応答する場合、エラーは次のようになります。
{ "statusCode" = 412, "type" = "application/vnd.microsoft.error.preconditionFailed", "value" = { "code" = "412", "message" = "authentication token expired" } }
SSO が失敗すると、Teams クライアントはカード フッターにサインイン ボタンを表示して、名目上のサインイン フローを開始します。
ボットは、アプリ ユーザーの代わりにアクセス トークンを使用してアクションを実行します。
ボットは、カードまたはメッセージを使用して、Teams クライアントにエラー以外の応答を返します。
注:
アプリ ユーザーがログアウトした場合にアクセス トークンを処理するには、「 アプリ ユーザーのログアウトを処理する」を参照してください。
コード サンプル
サンプルの名前 | 説明 | .NET | Node.js | マニフェスト |
---|---|---|---|---|
アダプティブ カードユニバーサル アクションの SSO | このサンプル コードでは、ボットでアダプティブ カードユニバーサル アクションの SSO 認証を有効にする方法を示します。 | 表示 | 表示 | 表示 |
関連項目
Platform Docs