web-dev-qa-db-ja.com

Graph API-操作を完了するための権限が不十分です

を使用してGraph Service Clientにアクセスしようとすると、エラーが表示されます。

コード:Authorization_RequestDenied
メッセージ:操作を完了するための権限が不十分です。

このエラーを調査した後、最も一般的な解決策は、APIのアクセス許可を設定することでした。これはすでに行われており、基本/完全プロファイルを読み取る権限があります。

APIを削除して再追加しました。

以下は、AzureAuthenticationProviderを継承するIAuthenticationProviderクラスのコードです。

public class AzureAuthenticationProvider : IAuthenticationProvider
{
    private string _azureDomain = "myDevDom.onmicrosoft.com";

    public async Task AuthenticateRequestAsync(HttpRequestMessage request)
    {
        try
        {
            string clientId = "2b823c67-1b0d-4a10-a9e1-737142516f5q";
            string clientSecret = "xxxxxx";

            AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");

            ClientCredential credentials = new ClientCredential(clientId, clientSecret);

            AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.Microsoft.com/", credentials);

            request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
        }
        catch (Exception ex)
        {
        }
    }
}

クライアントシークレットを無効なIDに変更しようとしましたが、エラーがスローされたため、クライアントキーは正しいです。また、アクセストークンを変更してアクセストークンが有効であることを確認しようとしましたが、これもエラーを返します。

上記のコードは正常に動作するようです。

以下は、Azure ADにアクセスしようとしているコードです。

public async Task<IGraphServiceUsersCollectionPage> GetUsersByLastName(string lastname)  
{
    GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
    string filter = String.Format("startswith(surname, '{0}')", lastname);
    IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().Filter(filter).GetAsync(); //Fails on this line
    return users;
}

どんな助けも大歓迎であり、どんな助けにも感謝します。 azureADpermissionProperties

23
j9070749

以下の手順を参照してください。

  1. スクリーンショットから、Read and write directory data(Azure ad graph api)のWindows Azure Active Directoryアプリケーションのアクセス許可を付与しているようです。 Microsoftグラフ(- https://graph.Microsoft.com/ )を使用しているため、Microsoft Graphのアプリケーション許可を付与する必要があります: enter image description here

  2. AADの管理者であるため、上のスクリーンショットに示されているGrant permissionボタンをクリックして、組織内のユーザーに権限を付与できます。

  3. 次に、コード(クライアント資格情報フローを使用してトークンを取得)を使用し、ユーザー情報を照会します。 Azure adによって発行されたアクセストークンの要求を確認すると、roles ClaimにDirectory.Read.All権限が見つかります。

10
Nan Yu

Grant permission許可の付与」をクリックし、すべてのユーザーアカウントに対してはいをクリックします。

12
user1166305

私にとって、この問題を解決するための鍵はヒントでした。

Graph APIをB2Cテナントで使用するには、Azure Portalの汎用アプリ登録メニュー(すべてのサービスであり、デフォルトではお気に入りのスター付きではありません)を使用して、専用アプリケーションを登録する必要がありますAzure AD B2Cの[アプリケーション]メニューではありません。Azure AD B2Cの[アプリケーション]メニューで登録した既存のB2Cアプリケーションは再利用できません。

ページで詳細を確認 AD B2C APIアクセスデモ

7
Honza P.

場合によっては、「委任されたアクセス許可」ではなく「アプリケーションのアクセス許可」を使用するため、実際の問題が発生します。私のアプリケーションでは、アプリケーション権限を持つすべてのユーザーをリストしようとしましたが、機能していませんでした。委任されたアクセス許可に切り替えたときに機能しました。

したがって、簡単なチェックは次のようになります。

  1. Microsoft Graph APIなどを使用しているかどうかを確認します
  2. 委任されたアクセス許可を使用します
  3. 権限の付与ボタンをクリックして権限を伝達します:)

うまくいけば、これは誰かを助けるでしょう。

2
milan.latinovic

「Directory.Read.All/Write」にチェックマークを付けて権限を付与するだけでは不十分です。

私は同じ問題に遭遇します。管理者の役割にサービス原則を追加することで解決しました。

アプリケーションが最近作成された場合、これはAzure AD Powershellで実行できます。

$pricinple = Get-AzureADServicePrincipal || Where-Object {$_.DisplayName -eq 'youappname'}

 $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'Company Administrator'}

Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId $pricinple.ObjectId

詳細については、「 https://docs.Microsoft.com/en-us/powershell/module/Azuread/Add-AzureADDirectoryRoleMember?view=azureadps-2. 」を参照してください

アプリケーションがかなり前に作成された場合、MSOnlineを使用する必要があります。参照: https://docs.Microsoft.com/en-us/powershell/module/msonline/Add-MsolRoleMember?view=azureadps-1.

1
Lang

Azure Active Directoryにグループを作成するとします。この問題を解決するには、次の手順を実行する必要があります。

  1. AD>アプリの登録>アプリ
  2. 必要な許可を選択してください
  3. [追加]をクリックし、[Microsoft Graph]を選択して追加します
  4. microsoft Graphを選択します
  5. 委任されたアクセス許可リストからすべてのグループの読み取りと書き込みを選択します
  6. そして保存する
  7. Windows Azure Active Directoryを選択し、すべてのアプリケーションのアクセス許可を付与します
  8. それを保存
1
Bilal Malik

アプリケーションにAD情報にアクセスするための十分な権限がないようです。以下のリンク/記事に記載されている手順に従ってAzureポータルにログインし、アプリケーションにADにアクセスするための十分な権限があるかどうかを確認できます。

http://www.morgantechspace.com/2016/01/graph-api-insufficient-privileges-to-complete-the-operation.html

https://docs.Microsoft.com/en-us/Azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

また、「authResult.AccessToken」があなたのケースではnullでないことを願っています。 1つは、上記の2番目のリンクには、ADへのアプリケーションアクセス権に関する非常に詳細な説明があります。あなたの助けになるかもしれません。

1
Sujith