次の方法で共有


Teams での SSO 認証のトラブルシューティング

SSO に関する問題と質問の一覧と、それらを修正する方法です。

Microsoft Graph のサポート


1. postman でGraph APIは機能しますか?
Microsoft Graph API は Microsoft Graph Postman のコレクションで使用できます。

詳細については、「Microsoft Graph API で Postman を使用する」をご覧ください。


2. Microsoft Graph エクスプローラーでGraph APIは機能しますか?
はい、Graph API は Microsoft Graph エクスプローラーで機能します。

詳細については、「Graph エクスプローラー」を参照してください。


エラー メッセージとその処理方法


1. エラー: 同意がありません。
Microsoft Entra IDは、Microsoft Graph リソースへのアクセス要求を受け取ると、アプリ ユーザーまたは管理者がこのリソースに同意したかどうかを確認します。 ユーザーまたは管理者からの同意の記録がない場合、Microsoft Entra IDは Web サービスにエラー メッセージを送信します。

コードは、クライアントに (たとえば、403 Forbidden 応答の本文で) エラーを処理する方法を伝える必要があります。

  • タブ アプリに管理者のみが同意できる Microsoft Graph スコープが必要な場合は、コードでエラーを生成する必要があります。
  • 唯一必要なスコープに対して同意できるのがユーザーである場合は、コードはユーザー認証の代替システムにフォールバックする必要があります。

2. エラー: スコープ (アクセス許可) がありません。
このエラーは、開発中にのみ発生します。

このエラーを処理するには、サーバー側のコードから 403 Forbidden 応答がクライアントに送信されます。 そのエラーをコンソールに記録するか、ログに記録する必要があります。


3. エラー: Microsoft Graph のアクセス トークンの対象ユーザーが無効です。
サーバー側コードは、403 Forbidden 応答をクライアントに送信して、ユーザーにメッセージを表示する必要があります。 また、エラーをコンソールに記録するか、ログに記録することをお勧めします。

4. エラー: ホスト名は、既に所有されているドメインに基づいていてはいけません。
このエラーは、次の 2 つのシナリオのいずれかで発生します:
  1. カスタム ドメインはMicrosoft Entra IDに追加されません。 カスタム ドメインをMicrosoft Entra IDに追加して登録するには、「カスタム ドメイン名を追加する」の手順Microsoft Entra ID従います。 次に、「アクセス トークンのスコープをもう一度 構成する」の 手順に従います。
  2. Microsoft 365 テナントで管理者の資格情報を使用してサインインしていません。 管理者として Microsoft 365 にサインインします。

5. エラー: 返されたアクセス トークンでユーザー プリンシパル名 (UPN) が受信されませんでした。
Microsoft Entra IDでは、省略可能な要求として UPN を追加できます。

詳細については、「アプリにオプションの要求を提供する」と「アクセス トークン」を参照してください。


6. エラー: Teams SDK エラー: resourceDisabled。
このエラーを回避するには、アプリの登録と Teams クライアントでアプリケーション ID URI Microsoft Entra正しく構成されていることを確認します。

アプリケーション ID URI の詳細については、「API を公開するには」を参照してください。


7. エラー: タブ アプリを実行するときの一般的なエラー。
Microsoft Entra IDで行われた 1 つ以上のアプリ構成が正しくない場合、一般的なエラーが表示されることがあります。 このエラーを解決するには、コードで構成されたアプリの詳細とアプリ マニフェスト (以前は Teams アプリ マニフェスト) がMicrosoft Entra IDの値と一致するかどうかをチェックします。

次の図は、Microsoft Entra IDで構成されたアプリの詳細の例を示しています。

Microsoft Entra IDのアプリ構成の値

次の値がMicrosoft Entra ID、クライアント側コード、アプリ マニフェストの間で一致することを確認します。

  • アプリ ID: Microsoft Entra IDで生成したアプリ ID は、コードとアプリ マニフェスト ファイルで同じである必要があります。 アプリ マニフェスト スキーマのアプリ ID が、Microsoft Entra IDのアプリケーション (クライアント) ID と一致するかどうかを確認します。

  • アプリ シークレット: アプリのバックエンドで構成されているアプリ シークレットは、Microsoft Entra IDのクライアント資格情報と一致する必要があります。 クライアント シークレットの有効期限が切れているかどうかも確認する必要があります。

  • アプリケーション ID URI: コード内およびアプリ マニフェスト ファイル内のアプリ ID URI は、Microsoft Entra IDのアプリケーション ID URI と一致する必要があります。

  • アプリのアクセス許可: スコープで定義したアクセス許可がアプリの要件に従っているかどうかを確認します。 その場合は、アクセス トークンでユーザーに付与されているかどうかをチェックします。

  • 管理者の同意: スコープに管理者の同意が必要な場合は、特定のスコープに対してユーザーに同意が付与されているかどうかを確認します。

さらに、タブ アプリに送信されたアクセス トークンを調べて、次の値が正しいかどうかを確認します:

  • 対象ユーザー (aud): トークン内のアプリ ID が、Microsoft Entra IDで指定されているとおりに正しいかどうかを確認します。
  • テナント ID (tid): トークンに記載されているテナントが正しいかどうかを確認します。
  • ユーザー ID (preferred_username): 現在のユーザーがアクセスするスコープについて、アクセス トークンの要求でユーザー ID がユーザー名と一致するかどうかを確認します。
  • スコープ (scp): アクセス トークンが要求されるスコープが正しく、Microsoft Entra IDで定義されているかどうかを確認します。
  • Microsoft Entraバージョン 1.0 または 2.0 (ver): Microsoft Entraバージョンが正しいかどうかを確認します。

JWT を使用してトークンを検査できます。

Bot SSO トークン エラー


トークン交換の失敗。
トークン交換エラーが発生した場合は、次のコードを使用します:
{​​ 
    "status": "<response code>", 
    "body": 
    {​​ 
        "id":"<unique Id>", 
        "connectionName": "<connection Name on the bot (from the OAuth card)>", 
        "failureDetail": "<failure reason if status code is not 200, null otherwise>" 
    }​​ 
}​​

トークン交換が同意プロンプトのトリガーに失敗した場合のボットの動作を理解するには、次の手順を参照してください。

注:

トークン交換が失敗したときにボットがアクションを実行するため、ユーザー アクションが実行される必要はありません。

  1. クライアントは、OAuth シナリオをトリガーするボットとの会話を開始します。

  2. ボットは OAuth カードをクライアントに返送します。

  3. クライアントは、OAuth カードをインターセプトしてからアプリ ユーザーに表示します。 TokenExchangeResource プロパティが含まれているかどうかを確認します。

  4. そのプロパティが存在する場合、クライアントはボットに TokenExchangeInvokeRequest を 1 つ送信します。 クライアントには、ユーザーの交換可能なトークンが必要です。 このトークンは、対象ユーザーが TokenExchangeResource.Uri プロパティと同じである必要がある Azure AD v2 トークンである必要があります。

  5. クライアントは、次のコードを使用してボットに呼び出しアクティビティを送信します:

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": 
        {
            "id": "<any unique Id>",
            "connectionName": "<connection Name on the skill bot (from the OAuth card)>",
            "token": "<exchangeable token>"
        }
    }
    
  6. ボットは TokenExchangeInvokeRequest を処理し、TokenExchangeInvokeResponse を 1 つクライアントに返します。 クライアントは、TokenExchangeInvokeResponse を受信するまで待機する必要があります。

    {
        "status": "<response code>",
        "body": 
        {
            "id":"<unique Id>",
            "connectionName": "<connection Name on the skill bot (from the OAuth card)>",
            "failureDetail": "<failure reason if status code is not 200, null otherwise>"
        }
    }
    
  7. TokenExchangeInvokeResponse200status がある場合、クライアントは OAuth カードを表示しません。 通常のフロー イメージを参照してください。 その他の status の場合、または TokenExchangeInvokeResponse が受信されていない場合、クライアントは OAuth カードをユーザーに表示します。 フォールバック フロー イメージを参照してください。 ユーザーの同意など、エラーや依存関係が満たされていない場合、このアクティビティにより、確実に SSO フローが通常の OAuthCard フローに戻ります。

    注:

    Teams Web クライアントでは、認証とトークンの取得に使用されるアクティブなMicrosoft Entra セッションがブラウザーに存在するため、パスワード プロンプトは表示されません。 Teams デスクトップ クライアントでは、デスクトップ クライアントに共有するMicrosoft Entra セッションがないため、パスワード プロンプトが表示され、ログインするように求められます。

関連項目

Microsoft Entra IDのアプリケーション プロパティのセキュリティに関するベスト プラクティス