を使用して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;
}
以下の手順を参照してください。
スクリーンショットから、Read and write directory data
(Azure ad graph api)のWindows Azure Active Directory
アプリケーションのアクセス許可を付与しているようです。 Microsoftグラフ(- https://graph.Microsoft.com/ )を使用しているため、Microsoft Graph
のアプリケーション許可を付与する必要があります:
AADの管理者であるため、上のスクリーンショットに示されているGrant permission
ボタンをクリックして、組織内のユーザーに権限を付与できます。
次に、コード(クライアント資格情報フローを使用してトークンを取得)を使用し、ユーザー情報を照会します。 Azure adによって発行されたアクセストークンの要求を確認すると、roles
ClaimにDirectory.Read.All
権限が見つかります。
私にとって、この問題を解決するための鍵はヒントでした。
Graph APIをB2Cテナントで使用するには、Azure Portalの汎用アプリ登録メニュー(すべてのサービスであり、デフォルトではお気に入りのスター付きではありません)を使用して、専用アプリケーションを登録する必要がありますAzure AD B2Cの[アプリケーション]メニューではありません。Azure AD B2Cの[アプリケーション]メニューで登録した既存のB2Cアプリケーションは再利用できません。
ページで詳細を確認 AD B2C APIアクセスデモ
場合によっては、「委任されたアクセス許可」ではなく「アプリケーションのアクセス許可」を使用するため、実際の問題が発生します。私のアプリケーションでは、アプリケーション権限を持つすべてのユーザーをリストしようとしましたが、機能していませんでした。委任されたアクセス許可に切り替えたときに機能しました。
したがって、簡単なチェックは次のようになります。
うまくいけば、これは誰かを助けるでしょう。
「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.
Azure Active Directoryにグループを作成するとします。この問題を解決するには、次の手順を実行する必要があります。
アプリケーションにAD情報にアクセスするための十分な権限がないようです。以下のリンク/記事に記載されている手順に従ってAzureポータルにログインし、アプリケーションにADにアクセスするための十分な権限があるかどうかを確認できます。
また、「authResult.AccessToken」があなたのケースではnullでないことを願っています。 1つは、上記の2番目のリンクには、ADへのアプリケーションアクセス権に関する非常に詳細な説明があります。あなたの助けになるかもしれません。