Azure 如何使用带有ADAL标记的Graph API?

Azure 如何使用带有ADAL标记的Graph API?,azure,xamarin.forms,azure-active-directory,Azure,Xamarin.forms,Azure Active Directory,在我的Xamarin.forms项目中,我使用ADAL(Microsoft.IdentityModel.Clients.ActiveDirectory)在Azure门户(Auth 1.0端点)上进行身份验证。这部分工作很好,但我需要获得用户的安全组。因此,我使用此代码并通过ADAL传递接收到的令牌: HttpClient client = new HttpClient(); HttpRequestMessage message = new HttpRequestMessage(HttpMet

在我的Xamarin.forms项目中,我使用ADAL(Microsoft.IdentityModel.Clients.ActiveDirectory)在Azure门户(Auth 1.0端点)上进行身份验证。这部分工作很好,但我需要获得用户的安全组。因此,我使用此代码并通过ADAL传递接收到的令牌:

 HttpClient client = new HttpClient();
 HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/memberOf");
 message.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", token);
 HttpResponseMessage response = await client.SendAsync(message);
 string responseString = await response.Content.ReadAsStringAsync();
我总是得到状态码:401,短语:“未授权”。 在我的azure AD应用注册中,我添加了Graph API和以下权限:

我想我错过了什么。有什么想法吗

-----编辑1--- 这是我的有效载荷。为了便于理解,我把它改成了一幅画。我不知道如何在这里发布json

----编辑2--- 哦我懂了。我想我需要更多地了解Azure登录过程。现在,我以ADAL和Azure为例,它们允许我在后端登录并使用一些功能。因此,登录过程使用:

var authContext = new AuthenticationContext(authority); var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams);

其中authority=,ResourceID是我的后端应用程序ID,clientID是我的本机应用程序ID。因此Shawn是正确的,我不使用Graph.microsoft.com获取令牌。我们是否有其他方法来实现这一切?使用Graph只需获得广告组,用户必须在应用程序内调整权限。

您的评论是正确的。如果向应用程序添加新权限,则必须要求用户重新同意该应用程序

您可以通过ADAL强制重新同意,方法是将
提示行为设置为
始终

platformParams.PromptBehavior = PromptBehavior.Always
或者,您可以通过添加查询字符串,简单地修改登录URL以强制执行:

&prompt=consent
在构建应用程序以帮助克服此问题方面,如果您认为您的应用程序在发布后将更改权限,您可以集成检测
未经授权的逻辑,然后发送用户重新同意

另一个选项是,应用程序跟踪可能需要新同意提示的更改,并检测用户何时首次使用此新版本的应用程序,并请求他们同意


在我们新的应用程序模型V2中,我们支持的概念是,这将为您一起解决此问题。

我想我找到了原因。我用于测试的用户已接受同意。现在,我添加了新的图形权限,我需要强制它重新接受新的许可,但我可以找到一种方法来强制它。我尝试使用platformParams.PromptBehavior=PromptBehavior.Auto;没有成功。皮埃尔,你在更新中要求什么?只需更新您的代码以请求一个标记到图形,而不是您为
资源设置的任何标记。您可能想打开一个新问题,因为您提出的问题与以前完全不同。Shawn,我不知道我可以连续调用AcquireTokenAsync两次。一次使用我的后端ID,获取一个以93f开头的aud标记,第二次使用图形URL调用,获取第二个对图形有效的标记。现在一切都好了。谢谢你的帮助。谢谢你的回复。我试着迅速行动,总是这样,但什么都没变。登录视图不要求更多的同意。所以我决定删除Azure门户中的反本机应用程序,然后重新创建它。现在我得到了“新”的许可,但当我要求时,我总是未经授权。你认为我需要更多的许可吗?你可以回答这个问题。是的,我已经读过了。他说,对于MemberOf,我只需要图形->阅读所有组。我将该权限设置为我的本机应用程序,然后Execute et接受新的许可,但我总是在收到的HttpResponseMessage中得到:“StatusCode:401,ReasonPhase:‘Unauthorized’,Version:1.1,Content:System.Net.Http.StreamContent,Headers”,但在response.Content.ReadAsStringAsync()中我得到:“code:“InvalidAuthenticationToken”,“message”::“访问令牌验证失败。“。您是否在AcquireTokenAsync不适用于Graph后在AuthenticationResult中精简我的令牌接收?是否可以使用解码器共享访问令牌的内容?请确保删除任何敏感数据。根据本文:我们不能使用ADAL令牌查询Microsoft图形。他们说使用graph.windows.net。但我认为微软不建议。。。