【发布时间】:2018-04-14 04:44:42
【问题描述】:
在我的 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();
我总是得到 StatusCode: 401, ReasonPhrase: 'Unauthorized'。 在我的 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 = https://login.microsoftonline.com/mysite.com,ResourceID 是我的后端应用 ID,clientID 是我的原生应用 ID。所以肖恩是正确的,我不使用 Graph.microsoft.com 来获取令牌。我们有其他方法来实现这一切吗?使用Graph只需要获取用户在应用内调整权限的AD组。
【问题讨论】:
-
我想我找到了原因。我用于测试的用户已经接受了同意。现在我添加了新的图表权限,我需要强制它重新接受新的同意,但我可以找到一种方法来强制它。我尝试使用 platformParams.PromptBehavior = PromptBehavior.Auto;没有成功。
-
皮埃尔,你在更新中问什么?只需更新您的代码以向 Graph 请求令牌,而不是您为
resource设置的任何内容。您可能想提出一个新问题,因为您提出的问题与以前完全不同。 -
Shawn,我不知道我可以连续调用 2 次 AcquireTokenAsync。一次使用我的后端 ID 并获取一个以 93f 开头的 aud 令牌,然后使用 Graph URL 进行第二次调用以获取对图形有效的第二个令牌。现在一切正常。感谢您的帮助。
标签: azure xamarin.forms azure-active-directory