次の方法で共有


Access Tokenに権限がないため、/meエンドポイントを呼び出す際にエラーが発生しました。

この記事では、Microsoft Graph で /me エンドポイントを呼び出すと、NoPermissionsInAccessToken エラー メッセージが表示される問題について説明します。 また、この記事では、クライアント資格情報付与フローを通じて取得されたトークンを使用して /me エンドポイントを呼び出せない理由についても説明します。

症状

クライアント資格情報付与フローを使用する Microsoft Entra ID ベースのアプリケーションから/me エンドポイントを呼び出そうとすると、次のエラー メッセージが表示されます。

{
"error": {
"code": "NoPermissionsInAccessToken",
"message": "The token contains no permissions, or permissions can not be understood.",
"innerError": {
"oAuthEventOperationId": "48f66de9-xxx-xxxx1-xxxx-399ea6608ec0",
"oAuthEventcV": "MkVd0xxxxxvjGFVJkoA.1",
"errorUrl": "https://aka.ms/autherrors#error-InvalidGrant",
"requestId": "80f8a0e9-xxxx-xxxx-xxxx-88e5d4bb5bb2",
"date": "2021-07-30T04:04:38"
}
}
}

原因

/me エンドポイントは、サインインしているユーザーが自分の情報を取得できるように設計されています。 /me エンドポイントを呼び出すには、エンドポイントが委任されたアクセス許可を使用するため、ユーザー コンテキストを指定する必要があります。 つまり、クライアント資格情報付与フローを使用して生成されたトークンは、ユーザー コンテキスト情報がないため、 /me エンドポイントを使用できません。

クライアント資格情報付与フローを使用して取得されたトークンは、ユーザー ID ではなくアプリケーション ID を表します。 これらのトークンには、委任されたアクセス許可の scp (スコープ) 要求ではなく、アプリケーションのアクセス許可に対する ロール 要求が含まれています。 ユーザー コンテキストがないと、 /me エンドポイントが要求に関連付けられているユーザーを特定できなくなります。

トークンの例

ユーザー コンテキストを持つトークン (ユーザーがサインインした委任されたフロー)

このトークンは、ユーザーがサインインした委任されたフローを使用して付与されます。 これには、ユーザー固有の情報と、現在のユーザーのアクセス許可を含む scp 要求が含まれます。

委任されたトークンの例を示すスクリーンショット。

アプリケーション ID を持つトークン (client_credentials許可フロー)

このトークンは、クライアント資格情報付与フローを使用して生成されます。 ユーザー固有の情報は含まれません。 代わりに、アプリケーションのアクセス許可の roles 要求が含まれています。

アプリケーション トークンの例を示すスクリーンショット。

解決策

アプリケーションでクライアント資格情報付与フローを使用する場合は、/me エンドポイントではなく、/users エンドポイントを使用する必要があります。 /users エンドポイントを使用すると、アプリケーション トークンを使用してユーザー固有の情報を取得できます。

たとえば、 GET https://graph.microsoft.com/v1.0/me/memberOf を呼び出して、ユーザーがメンバーになっているグループの一覧を生成する場合は、次のメソッドを使用します。

  1. クライアント資格情報付与フローを使用してアプリケーション トークンを取得します。
  2. アプリケーションに、ユーザー情報を照会するための User.Read.All アクセス許可があることを確認します。
  3. ユーザー エンドポイントを使用して、特定のユーザーの詳細を照会します。 {upn} を、ユーザーのユーザー プリンシパル名 (UPN) またはユーザー オブジェクト ID に置き換えます。
    GET https://graph.microsoft.com/v1.0/users/{upn or userID}/memberOf
    

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。