グラフAPIを使用して、Azure ADによって管理されるユーザーアカウントのプロパティを設定しようとしています。ユーザーがサインアップポリシーを完了した後、バックエンドのWeb APIがAzure ADによって呼び出され、ユーザーが自分で設定できないプロパティ(たとえば、新しいユーザーの内部顧客ID)を設定するという考えがあります。グラフAPIは、許可が与えられてもAuthorization_RequestDeniedを返します。
残念ながら、グラフAPIは、ユーザーを更新するパッチ要求を送信しようとすると、常に例外(「この操作に匹敵する権限がありません」)を返します。 アカウントが更新されたときにログインしているユーザーがいないため、すべてのユーザーの権限を管理者として付与しようとしています。私は基本的に私のアプリケーションを自動的にユーザープロファイルを管理できる第三者にしたい。
私のコードは次のようになります。私は登録されたアプリケーションのアプリケーションID、ディレクトリのテナントと私はクライアントシークレットとしてAzureの中で生成した鍵を使用してい
public class GraphAPIClient
{
private AuthenticationContext authContext;
private ClientCredential clientCredential;
private string adTenant;
public GraphAPIClient(string tenant, string clientID, string clientSecret)
{
authContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenant);
clientCredential = new ClientCredential(clientID, clientSecret);
adTenant = tenant;
}
public async Task<string> UpdateUserInfo(string objectID, string jsonUpdate)
{
return await SendPatchRequest("https://stackoverflow.com/users/" + objectID, jsonUpdate);
}
private async Task<string> SendPatchRequest(string api, string jsonRequest)
{
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.windows.net/", clientCredential);
HttpClient httpClient = new HttpClient();
string url = "https://graph.windows.net/" + adTenant + api + "?" + "api-version=1.6";
HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), url);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
request.Content = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
HttpResponseMessage response = await httpClient.SendAsync(request);
if(!response.IsSuccessStatusCode)
{
string error = await response.Content.ReadAsStringAsync();
object formattedError = JsonConvert.DeserializeObject(error);
throw new Exception("Graph API request failed:\n" + JsonConvert.SerializeObject(formattedError, Formatting.Indented));
}
return await response.Content.ReadAsStringAsync();
}
}
。私は正常にトークンを受け取る。
- を私が設定している(または私は私が持っていると思います)のユーザーを編集するために必要な権限:私が試した何
。私は管理者アカウントを使用して「許可の許可」をクリックし、Azureパネルで表示するとアクセス許可が表示されます。 Image
- 「すべてのユーザーのフルプロファイルを読み書きする」と「読み書きデータ"。これらのタスクのための適切なアクセス許可ですか?
- 新しいアプリケーション登録コンソールを使用しようとしましたが、トークンを取得しようとすると「呼び出し元アプリケーションのIDを確立できませんでした」という例外が表示されます。このコンソールで作成されたアプリケーションは、通常のAzure ADパネルでは表示されません。
誰でも私にこれを手伝ってもらえますか?私は徹底的に調査しましたが、この問題に関するほとんどの質問は古く、古いAzureパネルの使用をお勧めします。私はそれを試みましたが、それはまだ動作しません、私は新しいAzureパネルが最近AD編集機能を受け取り、それらの質問がされたときにそれらを持っていなかったと思います。
ご連絡ありがとうございます。これ以上の情報が必要な場合は、ご提供いただき誠にありがとうございます。
管理者同意のワークフローも完了しましたか? –
私は持っているとは思わない - 管理者の同意をアプリケーション全体に一度か、アプリケーション内で自動的に与える方法はあるのか?私は基本的に、ユーザーが自分で設定できない情報をユーザーアカウントに追加するバックグラウンドアプリケーションを開発しようとしています。ユーザーに同意を求めるワークフローがあることは承知していますが、それは既存のユーザーアカウント(Officeなど)にアクセスしようとするサードパーティのアプリケーションではなく、私たちが探しているものではないようです – Philippe