我已经实现了在角4.After用户使用Azure的Active Directory的多租户应用程序登录到我的应用我能够得到用户的info.But用户的照片是没有从Active Directory中获得,因为我实现了Graph API,如下面的代码片段所示。获得401(未授权)错误
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
不过是一个登录的用户“令牌”虽然调用此图形API我得到401 (Unauthorized)
错误。我尝试了所有,但没有用。 我已经改变了图形API设定S1在Active Directory应用程序也喜欢下面附件
另外我有下面的代码它的工作只针对单租户
[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。 COM/EN-US /库/蔚蓝/广告/图/ HOWTO/Azure的广告图-API的错误代码,和错误处理))关于什么的'401'详细的错误信息? –
{ “odata.error”:{ “代码”: “Authentication_MissingOrMalformed”, “消息”:{ “郎”: “EN”, “值”: “访问令牌缺失或残缺。” }, “日期”: “2017-10-11T07:02:15”, “的requestId”: “4f112369-931d-4a24-8f61-e303b0acb9c1”, “值”:空 } }而错误消息调用Graph API,但令牌是有效的,因为在用户直接登录我的应用程序后,我调用了Graph API。谢谢 –
您为访问令牌,委托令牌或应用程序令牌获取哪些流程? –