【发布时间】:2017-09-13 09:45:44
【问题描述】:
我正在尝试使用 microsoft graph api 来确定登录用户是否是 admin 组的成员。我的应用程序在 Azure 中进行了 etup 和配置,并使用活动目录来控制访问,效果非常好。
当用户登录时,我可以获取claimsidentiy 对象和用户信息。但我想使用图形 api 来获取登录用户所属的组列表,然后检查管理员组(管理员密钥保存在我的配置文件中)
在 Azure 中,我的 minifest 文件具有此设置“oauth2AllowImplicitFlow”:true。
该应用已启用 microsoft graph,并具有这些权限
登录用户并查看用户基本资料
然后我像这样创建 GraphServiceClient 的实例
GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
然后像这样审问小组
Group group = await graphClient.Groups[admin].Request().GetAsync();
我用一种方法创建了一个身份验证提供程序
public class AzureAuthenticationProvider : IAuthenticationProvider
{
public async Task AuthenticateRequestAsync(HttpRequestMessage request)
{
string clientId = Helpers.Settings.ClientId;
string clientSecret = Helpers.Settings.ClientSecret;
AuthenticationContext authContext = new AuthenticationContext(Helpers.Settings.AuthorityCHP);
ClientCredential creds = new ClientCredential(clientId, clientSecret);
AuthenticationResult authResult = await authContext.AcquireTokenAsync(Helpers.Settings.GraphUrl, creds);
request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
}
}
凭据是正确的,但每当我运行代码时都会出现此错误
代码:InvalidAuthenticationToken 消息:访问令牌验证失败。
内部错误 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:Microsoft.Graph.ServiceException:代码:InvalidAuthenticationToken 消息:访问令牌验证失败。
我得到了一个令牌,但它没有被接受,我在这里做错了什么?
好的,我现在为图形 api 使用了正确的 url,但我得到了这个错误
代码:Authorization_RequestDenied 消息:权限不足,无法完成操作。
在我的 azure Active Directory 应用设置中,我注册了 2 个 api 并获得了委派权限
Windows Azure 活动目录 - 阅读所有用户的基本资料 - 登录并阅读用户资料
微软图形 - 查看用户基本资料 - 查看用户的电子邮件地址 - 随时访问用户数据 - 阅读所有用户的基本资料 - 对用户配置文件的读写访问 - 登录并阅读用户资料
我点击了“授予权限”按钮并收到一条消息,告诉我权限已成功授予我的应用程序,但我仍然收到相同的错误消息:-(
当我创建 authentoicationcontext 的实例时,我是否应该传递已登录的用户 ID?
类似
AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
** 更新 2
我现在在 microsoft graph 启用访问部分中添加了“读取所有用户的完整配置文件”和“读取所有组”作为应用程序权限并授予权限。但它仍然完全一样,我到底应该如何让它工作?我只想看看登录用户属于哪个组,这太难了,难以置信。谁能帮帮我?
*** 它神奇地开始在我的本地开发环境和部署到 Azure 的应用程序中运行。但是,我的应用服务环境中还有 2 个其他应用“实例”,一个 QA 版本和一个“Dev”版本,如果我将相同的代码部署到这两个环境并尝试访问图形 API,我会收到此错误再次
代码:Authorization_RequestDenied 消息:权限不足,无法完成操作。
我被难住了,这太荒谬了,我的所有应用程序在该应用程序服务环境中的特权不应该完全相同吗?我真的很感谢这里的任何建议,这让我完全陷入困境,我看不到前进的道路
【问题讨论】:
-
Helpers.Settings.GraphUrl的值是多少?应该是https://graph.microsoft.com。 -
抱歉,我发帖时url部分会被自动删除
-
它的https冒号正斜杠正斜杠graph.windows.net