微软图

时间:2017-09-13 09:45:44

标签: c# azure-active-directory

我尝试使用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 消息:没有足够的权限来完成操作。

我很难过,它的不公平,对于我在该应用服务环境中的所有应用程序而言,这些特权是否完全相同?我非常感谢任何建议,这让我完全陷入困境,我无法看到前进的方向

1 个答案:

答案 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。