使用Microsoft Graph API,我能够获取Azure Active Directory租户中所有用户的列表,并确定他们是否有个人资料图片.我想在没有照片的情况下获取用户列表并为他们上传一个,但即使我使用的帐户具有对所有用户帐户的完全访问权限且应用程序设置为具有完全权限,API也会返回403错误到图谱API.
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("https://graph.microsoft.com/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/jpeg"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", oauthToken);
// HTTP GET
HttpResponseMessage response = await client.PatchAsync($"v1.0/users/{emailAddress}/photo/$value", byteContent);
if (!response.IsSuccessStatusCode)
{
throw new Exception("Error!");
}
}
Run Code Online (Sandbox Code Playgroud)
403 FORBIDDEN
是不是可以使用Graph API执行此操作,还是我错过了某处的权限?
SCP值为:Calendars.Read Calendars.ReadWrite Contacts.Read Contacts.ReadWrite Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All email Exchange.Manage Files.Read Files.Read.Selected Files.ReadWrite Files.ReadWrite .AppFolder Files.ReadWrite.Selected full_access_as_user Group.Read.All Group.ReadWrite.All Mail.Read Mail.ReadWrite Mail.Send MailboxSettings.ReadWrite Notes.Create Notes.Read Notes.Read.All Notes.ReadWrite Notes.ReadWrite.All Notes .ReadWrite.CreatedByApp offline_access openid People.Read People.ReadWrite profile Sites.Read.All …
我需要进行以下POST调用.但是,即使我提供了正确的客户端ID和密码ID,我的电话也会被拒绝.
curl POST https://login.microsoftonline.com/f02....e3/oauth2/token
-H 'Content-Type: application/x-www-form-urlencoded' --data 'grant_type=authorization_code&redirect_uri=https://requestb.in/ac&
source=https://graph.microsoft.com&client_id=1e1....-913d9
&client_secret=YmbSFYz.....4Uk=&scope=mail.read&code=AaAAA........on0a569'
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
curl: (6) Could not resolve host: POST
{"error":"invalid_client","error_description":"AADSTS70002:
Error validating credentials. AADSTS50012: Invalid client secret is
provided.\r\nTrace ID: 78d...a2b\r\nCorrelation ID:
01....ab2\r\nTimestamp: 2016-12-14 01:46:47Z","error_codes":[70002,50012],"timestamp":"2016-12-14 01:46:47Z","trace_id":"78d....a2b","correlation_id":"018.....ab2"}
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个问题?
编辑:我正在尝试在本文档中实现第二部分(即获取令牌)
通过使用jwt.io,我设法确定我的应用为Microsoft Graph API获取的令牌仅包含Directory.Read.All和User.Read的范围:
这与我在Azure门户中设置的权限不同,Azure门户包含更多范围,例如User.ReadBasic.All:
有没有什么办法解决这一问题?
我一直在调查如何使用Microsoft Graph API(nuget上可用的dotnet/C#库)从Azure AD组添加(以及稍后删除)用户.
忽略所有其他的连接GraphServiceClient
等等.我正在尝试与下面的示例非常相似的代码,没有得到任何异常(建议事情很好)但是当我再次通过API获得该组时,它仍然没有任何成员!
有趣的是(作为旁白),当我memberOf
在user
对象上请求属性并告诉它扩展它时,它仍然返回null.
var user = await client.Users[userPrincipalName]
.Request()
.Select("id,memberOf")
.Expand("memberOf")
.GetAsync();
var group = await client.Groups[groupId]
.Request()
.Select("members")
.Expand("members")
.GetAsync();
group.Members.Add(user);
await client.Groups[groupId].Request().UpdateAsync(group);
// userPrincipalName => "test.user@mytenant.com"
// groupId => the object GUID for the group
Run Code Online (Sandbox Code Playgroud)
有谁知道我在这里做错了什么?我用来提供此代码的文档基于以下文档的链接:
此外,我尝试在此处建议的解决方案上设置方法,为用户设置许可证:
像往常一样,谢谢你的帮助.
彼得
额外
我也尝试在图API中寻找可能更新.Members
属性/资源而不是组本身:
await client.Groups[groupId].Members.Request(). // <-- Only has GetAsync()
Run Code Online (Sandbox Code Playgroud)
但它只有GetAync()
可用的方法.
根据答案更新
var usersGroups = await client.Users[userPrincipalName].MemberOf.Request().GetAsync();
if (!usersGroups.Any(g …
Run Code Online (Sandbox Code Playgroud) 我试图获取用户个人资料图片的内容,但发现我必须调用Beta版本,因为当前版本给出以下错误消息:
"code": "GetUserPhoto",
"message": "The operation is not supported."
Run Code Online (Sandbox Code Playgroud)
因此,我尝试切换到Beta,这是我用C#编写的代码,但是没有用:
Microsoft.Graph 1.6.2
List<QueryOption> options = new List<QueryOption>
{
new QueryOption("$api-version", "beta")
};
var pictureStream = await graphClient.Me.Photo.Content.Request(options).GetAsync();
Run Code Online (Sandbox Code Playgroud)
我收到相同的错误消息。
我在图形资源管理器中尝试了相同的请求。1.0无效,但Beta有效。
我在https://apps.dev.microsoft.com上创建了一个应用
具有以下应用程序权限:
Calendars.Read (Admin Only)
Calendars.ReadWrite (Admin Only)
User.Read.All (Admin Only)
以下是唯一的流入已经为我工作才能够订阅其他用户的通知,上一个房客,如所描述这里
管理员同意
然后通过此URL成功授予了管理员同意
https://login.microsoftonline.com/common/adminconsent?client_id=bbb35336-faee-4c10-84b4-34136634db41&state=1234&redirect_uri=https%3A%2F%2Fdashmeetings.com%2Fmicrosoft%2Foauth
Run Code Online (Sandbox Code Playgroud)
获取访问令牌
然后从获得访问令牌
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
Run Code Online (Sandbox Code Playgroud)
带标题
Content-Type=application/x-www-form-urlencoded
Run Code Online (Sandbox Code Playgroud)
与{tenant}
价值tenant
在回调URL返回,
和具有键值对的主体
grant_type=client_credentials
client_id=bbb35336-faee-4c10-84b4-34136634db41
client_secret=xxx
scope=https://graph.microsoft.com/.default
Run Code Online (Sandbox Code Playgroud)
这将返回访问令牌,但不返回刷新令牌。
我认为这可能是因为offline_access
未要求。
如何获得刷新令牌?
我们使用Microsoft Graph和范围openid,email,个人资料和user.readBasic.all为公共社区(AD和实时用户可以登录)创建了一个融合应用程序。
一切对于实时用户都适用,但是某些AD用户无法登录。当他们尝试登录时,他们收到的消息为
“应用程序需要访问组织中只有管理员才能授予的资源的权限。请在使用之前请管理员授予对此应用程序的权限。”
根据Microsoft 文档,我们已将管理员同意网址准备为
https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&prompt=admin_consent
管理员同意后,用户也无法登录该应用程序。请帮助我们这里缺少的内容。
我们有一个应用程序,它使用本地AD来获取用户信息.有些客户希望迁移到云并使用Azure AD.我们扩展了应用程序以通过owin签署用户,现在我们通过Microsoft Graph获取用户.
但是,从Microsoft Graph我们没有获得完整的用户配置文件.我们想要获取用户的所有属性,而不仅仅是基本属性.
var client = new RestClient(string.Format("https://graph.microsoft.com/v1.0/users/{0}", userEmail));
request = new RestRequest();
request.Method = Method.GET;
request.AddHeader("Authorization", _token.Token);
var reponse = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)
这只给了我一些信息,例如我从这里得不到'部门'.是否可以在azure中配置应该返回的内容,如果是,那么在哪里?或者我还需要其他东西/users/
吗?
不同的客户可能具有需要获取的不同特殊属性.因此,最好的解决方案是让端点调用并获取所有内容,包括azure广告中不标准的特殊属性.之后,我可以解析它在我身边.这可能吗?
应用程序拥有读取基本和完整配置文件的权限.我还需要更多东西吗?
Microsoft Graph API calendarView仅限于一个月吗?我如何获得所有活动?是否有一些隐含的分页?
我首先检查之间的事件的JSON输出2017-01-01
和2018-12-30
:
https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime=2017-01-01T00:00:00.0000000&endDateTime=2018-12-30T00:00:00.0000000
Run Code Online (Sandbox Code Playgroud)
并列出日期
jq '.value[] .start .dateTime'
"2017-11-22T13:30:00.0000000"
"2017-11-23T14:00:00.0000000"
"2017-11-24T14:00:00.0000000"
"2017-11-27T10:00:00.0000000"
"2017-11-27T10:00:00.0000000"
"2017-11-27T11:00:00.0000000"
"2017-11-27T14:30:00.0000000"
"2017-11-28T09:00:00.0000000"
"2017-11-29T09:00:00.0000000"
"2017-11-29T14:00:00.0000000"
Run Code Online (Sandbox Code Playgroud)
例如,2017年12月没有日历活动!但我有他们!
然后通过缩小2017-12-01
和之间的日期范围的左端来做类似的调用2018-12-30
,现在我得到:
"2017-12-01T12:30:00.0000000"
"2017-12-01T14:00:00.0000000"
"2017-12-04T08:30:00.0000000"
"2017-12-04T12:00:00.0000000"
"2017-12-06T09:00:00.0000000"
"2017-12-06T10:00:00.0000000"
"2017-12-07T13:00:00.0000000"
"2017-12-13T09:00:00.0000000"
"2017-12-13T09:00:00.0000000"
"2017-12-13T13:00:00.0000000"
Run Code Online (Sandbox Code Playgroud)
我对List calendarView和List事件文档感到困惑.
如何才能获得我日历中的所有活动,我可以清楚地看到2017年11月和12月以及2018年1月和2月的活动?
我是否必须在一年中每个月重复调用此API?(我希望我可以通过一次电话来获得一年或两年内的所有活动,之后我可以过滤,处理等等)
i have been trying to tackle this issues for a while now, i am workin on an Office-js addin for Outlook and is trying to access Microsoft Graph data through my addin.
But i have been unable to authenticate the token i recieve from getAccessTokenAsync. If i attempt to use the authenticator from Office-JS-Helpers i can get access, but i would prefer to use the built in function of the addin for it.
the code i am trying to use …
microsoft-graph ×10
azure ×4
c# ×4
office365 ×2
api ×1
asp.net ×1
calendar ×1
curl ×1
javascript ×1
office-js ×1
office365api ×1