Azure Active DirectoryをAngularで使用してマルチテナントアプリケーションを実装しました。ユーザがアプリケーションにログインした後、ユーザ情報を取得できます。 Active Directoryから取得していないため、私は以下のスニペットのようなGraph APIを実装しています。マルチテナントアプリケーションのActive Directoryユーザイメージで401(Unauthorized)エラーを取得する
ここpublic Task<UserDto> getPhoto(TenantDto tenantDto)
{
var client = new HttpClient();
client.BaseAddress = new Uri(String.Format("https://graph.windows.net/{0}/users/{1}/thumbnailPhoto?api-version=1.6", tenantDto.tenantKey, tenantDto.email));
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/jpeg"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tenantDto.token);
HttpResponseMessage response = client.GetAsync("").Result;
if (response.IsSuccessStatusCode)
{
return null;
//Status status = response.Content.ReadAsAsync<Status>().Result;
//if (status.Code == 200)
// InBoundResponse = JsonConvert.DeserializeObject<InBoundCallResponse>(status.Data.ToString());
//return InBoundResponse;
}
else
{
return null;
}
}
tenantDto.token
私は401 (Unauthorized)
エラーを取得しています。このグラフAPIを呼び出している間、ユーザーにログインし、「トークン」に他なりません。私はすべてを使ってみた。 は、私は、Active Directory APPでの設定グラフAPIを変更しているにも添付 また
以下のように私はそれが単一のテナントのためにのみ
[Route("AdUserImage"), HttpGet]
public async Task<HttpResponseMessage> userImage()
{
var authContext = new AuthenticationContext("https://login.windows.net/sampletest.onmicrosoft.com/oauth2/token");
var credential = new ClientCredential(clientID, clientSecret);
ActiveDirectoryClient directoryClient = new ActiveDirectoryClient(serviceRoot, async() =>
{
var result = await authContext.AcquireTokenAsync("https://graph.windows.net/", credential);
return result.AccessToken;
});
var user = await directoryClient.Users.Where(x => x.UserPrincipalName == "[email protected]").ExecuteSingleAsync();
DataServiceStreamResponse photo = await user.ThumbnailPhoto.DownloadAsync();
using (MemoryStream s = new MemoryStream())
{
photo.Stream.CopyTo(s);
var encodedImage = Convert.ToBase64String(s.ToArray());
}
//string token = await HttpAppAuthenticationAsync();
Status status = new Status("OK");
status = new Status("Found", null, "User exists.");
return Request.CreateResponse(HttpStatusCode.OK, status, _jsonMediaTypeFormatter);
}
を働いているコードの下のように試してみましたが、私は、マルチテナントのために実装する必要がありますアプリ。
すべての回答ありがとうございます。
ありがとうございました........!
いくつかの異なる '401'にエラーがあります(https://msdn.microsoft([こちら]を参照してください。/app-graph-api-error-code-and-error-handling)) '401'に関する詳細なエラーメッセージは何ですか? –
{ "odata.error":{ "コード": "Authentication_MissingOrMalformed"、 "メッセージ":{ "ラング": "EN"、 "値": "アクセストークンが存在しないか、不正な形式の" }、 "日付": "2017-10-11T07:02:15"、 "requestId": "4f112369-931d-4a24-8f61-e303b0acb9c1"、 "値":NULL }}エラーメッセージ一方Graph APIを呼び出すが、ユーザーが自分のアプリケーションに直接ログインした後、Graph APIを呼び出しているため、トークンは有効です。ありがとう –
アクセストークン、デリゲートトークン、またはアプリケーショントークンのどのフローを取得していますか? –