当https://graph.microsoft.com/v1.0/me
我尝试获取邮件网址时,我会不断收到回复"mail:null"
.
完整回复如下:
{
"@odata.context": "https://graph.microsoft.com/v1.0/",
"@odata.type": "#microsoft.graph.user",
"@odata.id": "users/XXXXXXXXX",
"businessPhones": ["XXXXXXXX"],
"displayName": "XXXX XXXX",
"givenName": "XXXX",
"jobTitle": null,
"mail": null,
"mobilePhone": "XXXXXXXX",
"officeLocation": null,
"preferredLanguage": "en-US",
"surname": "XXXXXXX",
"userPrincipalName": "XXXXXXX@XXXXX.onmicrosoft.com",
"id": "XXXXX-XXXXX-XXXXX"
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么它不会返回完整的个人资料信息?我使用的是1.0版.
请求访问/刷新令牌时,会发送刷新令牌,但API响应中缺少"refresh_token_expires_in"属性.我不知道官方到期时间戳是什么.为什么缺少记录的财产?
对于授权类型"authorization_code"和"refresh_token"授权请求,我收到相同的响应正文.以下是我收到的一个例子.
{
"token_type": "Bearer",
"expires_in": "3599",
"scope": "Calendars.Read Calendars.ReadWrite Files.Read Files.ReadWrite User.Read User.Read.All",
"expires_on": "1455797016",
"not_before": "1455793116",
"resource": "https://graph.microsoft.com/",
"access_token": "eyJ0eXAiOiJKV1QiL...",
"refresh_token": "AAABAAAAiL9Kn2Z27Uub..."
}
Run Code Online (Sandbox Code Playgroud)
如您所见,仅包括访问令牌到期.一个额外的问题是这个"not_before"是什么?我找不到这个属性意味着什么的参考.
http://graph.microsoft.io/en-us/docs/authorization/app_authorization 使用刷新令牌续订到期访问令牌"新的到期时间是指从expires_in和refresh_token_expires_in值中指定的秒数成功提交令牌刷新请求时."
"获取访问令牌"部分甚至指出:"在任何生产代码中,您的应用需要监视这些令牌的到期,并在刷新令牌到期之前续订过期的访问令牌." 但是,它似乎没有给我应该监控的到期时间.
在getHub上似乎有一个未解决的问题 https://github.com/OfficeDev/microsoft-graph-docs/issues/115
我试图使用Graph API在我的OneDrive应用的特殊应用文件夹中创建一个上传会话。我的应用程序具有以下权限:
Files.ReadWrite
Files.ReadWrite.AppFolder
offline_access
Run Code Online (Sandbox Code Playgroud)
请求看起来像这样
https://graph.microsoft.com/v1.0/users/xxxxxx96-2e02-4300-8ab0-a05d73xxxxxx/drive/special/approot:/documentname.docx:/createUploadSession
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
{
"error": {
"code": "itemNotFound",
"message": "The resource could not be found.",
"innerError": {
"request-id": "7447aa01-6685-4af0-998a-64abc9b14825",
"date": "2017-04-06T10:07:46"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以在普通根文件夹上创建一个上传会话,而不会出现任何错误:
graph.microsoft.com/v1.0/users/xxxxxx96-2e02-4300-8ab0-a05d73xxxxxx/drive/root:/documentname.docx:/createUploadSession
Run Code Online (Sandbox Code Playgroud)
结果:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.uploadSession",
"expirationDateTime": "2017-04-06T10:32:48.5252565Z",
"nextExpectedRanges": [
"0-"
],
"uploadUrl": "......."
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用C#中的.net应用程序中的Graph REST API自动获取AD报告.
我在新的Azure门户中创建了一个服务主体(使用应用程序注册).此服务主体具有为OAuth 2.0配置的所有必需信息:
服务主体还具有为"Microsoft Graph"适当设置的权限,作为"读取目录数据".
我能够从.net应用程序使用REST API获取令牌,但是当我尝试在我的代码中使用此令牌时,我收到错误:" 无法检查appId的目录读取权限 ".
我使用令牌进行REST API调用的代码是(我已经更改了租户ID等的GUID):
var client2 = new RestClient("https://graph.windows.net/a0a00aa0-aaaa-0000-0000-00000e0000aa/reports?api-version=beta");
var request2 = new RestRequest(Method.GET);
request2.AddHeader("cache-control", "no-cache");
request2.AddHeader("authorization", "Bearer " + token);
request2.AddHeader("content-type", "application/json");
IRestResponse response2 = client2.Execute(request2);
Console.WriteLine(response2.Content);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
{
"error":{
"code":"Unable to check Directory Read access for appId: 00000aa-aaaa-0a0a-0000-000000000000","message":"message:Unable to check Directory Read access for appId: 00000aa-aaaa-0a0a-0000-000000000000\n client-request-id:00aa0a0a-48bf-4bf8-ae40-a2976a3c6910 timestamp:2017-04-28 01:38:52Z"
}
}
Run Code Online (Sandbox Code Playgroud)
我已经检查过,凭据没有按照某些博客的指示缓存.我甚至从一个空白的VM运行代码并得到了同样的错误.任何指针来解决此错误或可能导致此错误的原因.
我解决了这个问题.我知道解决这个问题的确切步骤.但我不知道潜在的概念.如果有人能通过PowerShell或GUI向我解释以及如何做到这一点(即使是2行),我会接受这个作为答案.我采取的步骤是:
真诚的道歉,如果我错过了这篇文章的内容,因为我在读完了几个小时之后我的智慧结束了.
我正在尝试编写一个后端服务(Windows),它将通过Azure AD连接到MS Graph API.我正在使用C#来破坏概念验证,但是在MS文档,博客等方面遇到了很多问题,这些问题相当令人费解并且质量很差.他们似乎都认为他们的API的消费者是前端桌面或基于浏览器的应用程序.
无论如何,我设法使用服务帐户的UserPasswordCredential连接到Graph,我在AuthenticationContext响应中收到一个令牌,但没有刷新令牌信息.MSDN建议该方法可能会返回刷新信息,但嘿嘿,它可能不会.
此外,阅读(或尝试阅读)ADAL 3上的博客文章(从2015年开始):
让我对刷新现在的工作方式感到困惑.这篇文章似乎暗示着令人神奇的是令牌在缓存中为你刷新,但在用我的POC测试之后情况并非如此.
我也从MS中看到了这篇文章,似乎在标题中指出:
https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in-office-365
然而,需要你注册应用程序,跳过弹出式箍允许访问等等.
由于我的样本正在运行,我已经尝试安排重新认证,希望在获得初始令牌(持续60分钟)后50分钟获得新令牌但是我得到相同的令牌.这意味着在60分钟1秒内,通过客户端的任何调用都会抛出异常(ServiceException,我必须检查里面的文本以查看令牌到期相关信息).对我来说,无法重新验证和刷新令牌以继续使用客户端进行更"无缝"的使用是没有意义的.
这是我的代码的精简版示例:
namespace O365GraphTest
{
using Microsoft.Graph;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Nito.AsyncEx;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Linq;
using System.Threading;
using System.Security;
public class Program
{
// Just use a single HttpClient under the hood so we don't hit any socket limits.
private static readonly HttpProvider HttpProvider = new HttpProvider(new HttpClientHandler(), false);
public static void Main(string[] args)
{
try
{
AsyncContext.Run(() => …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Azure AD登录和Graph API集成到我的angular2网站中。
我已经成功实现了ADAL登录和重定向,它是围绕此处的一个有用的博客文章构建的
从中,我检索了adalservice可以访问的id_token参数。当前,这是通过简单的context.login()
并在重定向中捕获令牌来实现的。
当我使用此令牌尝试访问Microsoft Graph时,收到InvalidAuthenticationToken
响应,指出Access Token validation failure
。
我是新手,因此可能是我的电话本来是错误的,或者我在AD中缺少某些权限,或者我的应用程序注册表缺少权限。我已经看到我可能需要请求具有足够范围的访问令牌,但是我可以找到任何此类示例。
有没有人使用此adalService库获取用于Graph API的令牌?
此代码有效
https://graph.microsoft.com:443/v1.0/me/drive/root?$filter=Size eq 0&$expand=children($select=id,folder,name,parentReference,cwebUrl)&$select=Id,folder,name,parentReference,children,webUrl
Run Code Online (Sandbox Code Playgroud)
我想在孩子里面过滤:
https://graph.microsoft.com:443/v1.0/me/drive/root?$filter=Size eq 0&$expand=children($select=id,folder,name,parentReference,cwebUrl&$filter=Size eq 0)&$select=Id,folder,name,parentReference,children,webUrl
Run Code Online (Sandbox Code Playgroud) 当我从Graph API获得日期(事件或任务)时,它将保存在DateTimeTimeZone类的实例中.此对象由作为字符串的2个属性(日期时间和时区)组成,并且呈现UTC日期.有没有办法将这个"日期"转换为本地DateTime?
今天,通过Microsoft Graph调用OneDrive对象时,组中的访客用户开始收到未经身份验证的错误.我看到其他人在其他帖子中报道的情况相同.@马克 - 拉弗勒
请求:
https://graph.microsoft.com/v1.0/drives/b!Sd7PJstOMUyRktUqCP0SCiuiFPse_zxDrRCufOLLTLvOTGuwXirNSpqvcJtm9YaO/items/0173HJLOWFCUJDCTLMB5HJOBFF44YF3L5Q/children?$选择= ID,名称,文件夹,WEBURL,lastModifiedDateTime,大小,createdBy,createdDateTime
响应:
{
"error": {
"code": "unauthenticated",
"message": "Role Claim does not exist for Service Asserted App V1.",
"innerError": {
"request-id": "e059ddf5-32b7-4c9c-b849-9ea0d223a96e",
"date": "2018-06-27T12:54:55"
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Azure上托管的ASP.NET Core 2.0应用程序,并使用MSAL通过Microsoft对用户进行身份验证.我通过身份验证过程获取基本信息,如名称,用户名和组声明.但是,我想通过MS Graph访问一些其他信息,例如用户个人资料照片.初始身份验证和令牌获取平稳运行,并向https://graph.microsoft.com/beta/me
返回发送请求200 OK
.https://graph.microsoft.com/beta/me/photo/$value
然而,当试图打电话时,我得到一个401 - Unauthorized
回报.
我在这个问题上看到了其他几篇文章,但大多数人都认为开发人员忘记要求正确的同意,从错误的端点获取令牌或类似的问题.所有这些我都证实不是这样的.
我已经确认使用https://jwt.ms/在令牌中包含了适当的范围.我也尝试过要求更大的范围.目前我正在使用以下范围:openid profile User.ReadBasic.All User.Read.All User.ReadWrite Files.ReadWrite.All
.根据获取用户的beta参考,最少需要的权限是,User.Read
并根据获取照片的参考,最少需要的权限也是User.Read
.使用Graph Explorer我还确认我应该使用我的权限访问该照片,但是,我没有在我的个人资料上设置任何图片,因此它给了我一个404
回复.
我不知道为什么我无法访问个人资料照片,所以任何建议都非常感谢.如果您需要更多信息或详细信息,请告诉我们.如果相关,我有一个自定义中间件来处理读取用户信息的后验证过程,这也会对照片的MS Graph进行额外调用.
我也试过https://graph.microsoft.com/beta/users/{my-user-id}/photo/$value
产生相同的结果 - 图形浏览器中的404和我的代码中的401
这是我正在使用的代码.第一个代码段位于中间件中,该中间件将来自经过身份验证的用户的声明置于特定格式.我刚刚在返回时设置了一个断点并检查了响应对象.
public async Task GetUserPhotoAsync(string userid, HttpContext context)
{
HttpClient client = new HttpClient();
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var result = await new TokenHelper(_settings).GetAuthenticationAsync(userid, context, new string[] { "User.ReadBasic.All", "User.Read.All", "User.ReadWrite", "Files.ReadWrite.All" });
var …
Run Code Online (Sandbox Code Playgroud) microsoft-graph ×10
c# ×4
azure ×3
onedrive ×3
adal ×1
adal.js ×1
api ×1
datetime ×1
graph ×1
oauth-2.0 ×1
odata ×1
rest ×1
restful-url ×1
sharepoint ×1