我尝试使用microsoft graph api来确定登录用户是否是管理员组的成员。我的应用程序是etup并在Azure中配置并使用活动目录来控制访问,这非常有效。
当用户登录时,我可以声明对象和用户信息。但我想使用图形api获取登录用户所属的组列表,然后检查管理员组(管理员密钥保存在我的配置文件中)
在Azure中,我的minifest文件具有此设置“oauth2AllowImplicitFlow”:true。
并且该应用已启用微软图表,具有这些权限
登录用户&查看用户基本配置文件
然后我就像这样创建一个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的正确网址,但是我发现了这个错误
代码:Authorization_RequestDenied 消息:没有足够的权限来完成操作。
在我的azure活动目录的应用程序设置中,我有2个api注册了委派权限
Windows Azure Active Directory - 阅读所有用户的基本配置文件 - 登录并阅读用户个人资料
Microsoft Graph - 查看用户基本配置文件 - 查看用户电子邮件地址 - 随时访问用户数据 - 阅读所有用户基本配置文件 - 对用户配置文件的读写访问权限 - 登录并阅读用户个人资料
我点击了“授予权限”按钮并收到一条消息,告诉我已经成功为我的应用程序授予了权限,但我仍然收到相同的错误消息: - (
当我创建authenticntoicationcontext的实例时,我是否应该传入已登录的用户ID?
类似
AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));
**更新2
我现在在微软图启用访问部分和授予的权限中添加了“读取所有用户完整配置文件”和“读取所有组”作为应用程序权限。但它仍然完全相同,我到底该如何让它发挥作用?我想要的只是看看登录用户属于哪个组,这太难以理解了。任何人都可以帮助我吗?
***神奇地它开始在我的本地开发环境和部署到Azure的应用程序中工作。但是,我的应用服务环境中还有2个其他app'实例',QA版本和'Dev'版本,如果我将相同的代码部署到这两个环境并尝试访问图API,我会收到此错误再次
代码:Authorization_RequestDenied 消息:没有足够的权限来完成操作。
我很难过,它的不公平,对于我在该应用服务环境中的所有应用程序而言,这些特权是否完全相同?我非常感谢任何建议,这让我完全陷入困境,我无法看到前进的方向
答案 0 :(得分:3)
如果您致电 Microsoft Graph API (https://graph.microsoft.com),则资源URI必须为https://graph.microsoft.com
:
await authContext.AcquireTokenAsync("https://graph.microsoft.com", creds);
https://graph.windows.net
适用于 Azure AD Graph API ,这是一个不同的API。