Ich habe Multi-Tenant-Anwendung mit Azure Active Directory in Angular 4.After Benutzer in meine Anwendung eingeloggt, ich bin in der Lage, Benutzerinfo.But Benutzerfoto ist nicht aus dem Active-Verzeichnis für das ich habe Graph-API wie unten Snippet implementiert.Fehler 401 (Unauthorized) in Active Directory-Benutzerimage in Multi-Tenant-Anwendung
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;
}
}
Hier tenantDto.token
ist nichts anderes als ein angemeldeter Benutzer „Token“ Während dieses Graph API aufrufen ich bin 401 (Unauthorized)
Fehler. Ich habe alles versucht aber keine Verwendung. Ich habe Graph geändert API Einstellung in Active Directory s APP auch wie unten Befestigung
Auch ich unten Code versucht haben, wie es nur für einzelne Mieter
[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);
}
aber ich brauche zu implementieren für Multi Tenant funktioniert App
Jede Antwort geschätzt.
Vielen Dank im Voraus ........!
Es gibt verschiedene '401' Fehler (siehe [hier] (https://msdn.microsoft. com/de-us/library/azure/ad/graph/howto/azur-ad-graph-api-fehlercodes-und-fehler-handlung)) Was ist die detaillierte Fehlermeldung über '401'? –
{ "odata.error": { "Code": "Authentication_MissingOrMalformed", "message": { "lang": "en", "Wert": "Zugriffstoken fehlt oder fehlerhaft." }, "Datum": "2017-10-11T07: 02: 15", "requestId": "4f112369-931d-4a24-8f61-e303b0acb9c1", "Werte": null } } Fehlermeldung beim Aufrufen der Graph-API, aber Token ist gültig, da nachdem der Benutzer sich direkt in meiner Anwendung angemeldet hat, ich die Graph-API aufgerufen habe.Danke –
Welchen Fluss haben Sie für das Zugriffstoken, den Delegiertoken oder das Anwendungstoken erworben? –