Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 列出所有加入的团队_Azure Active Directory_Microsoft Graph Api - Fatal编程技术网

Azure active directory 列出所有加入的团队

Azure active directory 列出所有加入的团队,azure-active-directory,microsoft-graph-api,Azure Active Directory,Microsoft Graph Api,我有一个网站,在那里我有一个用户登录Azure广告,然后我试图得到一个列表的所有微软团队,该用户是一部分。我使用的是GraphServiceClient,它似乎没有测试版的内容,但我想我已经解决了这个问题,请看下面的示例,如果有更好的方法,请告诉我 首先,当我创建GraphServiceClient时,我会像这样向构造函数提供beta端点 公共GraphServiceClient GetAuthenticatedClient(字符串用户ID){ _graphClient=新的GraphServi

我有一个网站,在那里我有一个用户登录Azure广告,然后我试图得到一个列表的所有微软团队,该用户是一部分。我使用的是GraphServiceClient,它似乎没有测试版的内容,但我想我已经解决了这个问题,请看下面的示例,如果有更好的方法,请告诉我

首先,当我创建GraphServiceClient时,我会像这样向构造函数提供beta端点

公共GraphServiceClient GetAuthenticatedClient(字符串用户ID){
_graphClient=新的GraphServiceClient(“https://graph.microsoft.com/beta,新的DelegateAuthenticationProvider(
异步(请求消息)=>{
//将租户ID传递给示例身份验证提供程序以用作缓存密钥
AccessToken=await\u authProvider.GetUserAccessTokenAsync(userId);
//将访问令牌附加到请求
requestMessage.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,AccessToken);
}));
返回图形客户端;
}
您还会注意到,我正在存储AccessToken,因为我稍后需要它,这就是为什么我质疑是否有更好的方法来处理这个问题

然后,在我试图获取加入团队列表的方法中,我做了以下工作

公共静态异步任务>GetGroups(GraphServiceClient graphClient){
var request=graphClient.Me.request().GetHttpRequestMessage();
request.RequestUri=新Uri(request.RequestUri.AbsoluteUri+“/joinedTeams”);
//request.RequestUri=新Uri(“https://graph.microsoft.com/beta/groups");
request.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,GraphSDKHelper.AccessToken);
request.Headers.Accept.Add(新的MediaTypeWithQualityHeaderValue(“application/json”);
试一试{
var response=await-graphClient.HttpProvider.sendsync(请求);
var stream=await response.Content.ReadAsStreamAsync();
}捕获(例外e){}
//var gs=await graphClient.Me.MemberOf.Request().GetHttpRequestMessage();/.GetAsync();
var结果=新列表();
var groups=await graphClient.groups.Request().GetAsync();
做{
foreach(组中的var组){
结果.添加(组.显示名称);
}
groups=wait groups.NextPageRequest.GetAsync();
}while(groups.NextPageRequest!=null);
返回结果;
}
你可以看到这有两个部分。第一部分我尝试使用加入的团队调用,但这给了我以下错误。然后我列出了所有的组,其中一个工作正常

Message: Authorization has been denied for this request.

Inner error
在portal.azure.com中,我有应用程序注册设置,并已授予user.read.all应用程序权限

还有user.read.all在委托权限下(不确定我需要给它哪个权限)

所以,为什么这不起作用,如果有其他事情我做得不正确,请让我知道

经过更多的测试后,还有一个额外的注意事项。问题其实是我自己。任何时候我打电话给我的东西,如我/驱动器等,它都会出错。我可以调用用户[XXXXX]/驱动器,这很好,但我下面的任何操作都会失败

已编辑

他是创建
GraphServiceClient
的代码,基于Marc下面的回答,这可能是我无法访问
me
的问题的原因:

公共GraphServiceClient GetAuthenticatedClient(字符串用户ID)
{
_graphClient=新的GraphServiceClient(“https://graph.microsoft.com/beta,新的DelegateAuthenticationProvider(
异步(请求消息)=>
{
//将租户ID传递给示例身份验证提供程序以用作缓存密钥
AccessToken=await\u authProvider.GetUserAccessTokenAsync(userId);
//将访问令牌附加到请求
requestMessage.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,AccessToken);
}));
返回图形客户端;
}
公共异步任务GetUserAccessTokenAsync(字符串用户ID)
{
TokenCache userTokenCache=new SessionTokenCache(userId,_memoryCache).GetCacheInstance();
尝试
{
AuthenticationContext authContext=新的AuthenticationContext(_aadInstance,userTokenCache);
ClientCredential=新的ClientCredential(\u appId,\u appSecret);
AuthenticationResult=等待authContext.AcquireTokenAsync(\u graphResourceId,credential);
返回result.AccessToken;
}
捕获(例外情况除外)
{
返回null;
}
}

如果您使用的是应用程序权限(也称为“客户端凭据流”),则无法使用
/me/
调用任何方法。
/me/
路径要求上下文中有一个用户。仅当用户已通过身份验证且您正在使用委派权限(也称为“授权授予”或“隐式授予”流)时,才会发生这种情况

尤其是
joinedTeams
方法也有一个当前仅限于
me
用户使用的方法,有效地使应用程序场景变得不可能

我建议转向具有委托作用域的授权授予流,并要求用户进行身份验证。这将启用
me
用户上下文,并允许您检索
joinedTeams


至于存储令牌,这不是一个好的解决方案。代币的寿命相对较短。相反,您应该请求“脱机访问”权限。这将启用
刷新\u令牌
,您可以根据需要存储并使用该令牌检索新的
访问\u令牌

如果您使用的是应用程序权限(也称为“客户端凭据流”),则无法使用
/me/
调用任何方法。
/me/
路径要求上下文中有一个用户。仅当用户已通过身份验证且您正在使用委派权限(也称为“授权授予”或“隐式授予”流)时,才会发生这种情况

尤其是
joinedTeams
方法还有一个当前将其限制为
me
u的