ActiveDirectoryClient 2.0 - 没有足够的权限来完成操作

时间:2018-01-03 19:30:26

标签: c# microsoft-graph adal

您好:我正在尝试将项目转换为使用较新的ActiveDirectoryClient。我已经使用Graph 1客户端和较旧的Azure Portal做了几次,但我遇到了“权限不足”的错误。

几个问题:

  1. 我进去并给了我的应用程序“应用程序权限”,并使用了客户端ID和密码。我添加了Microsoft Graph API,“读取所有用户的完整配置文件”和“读取目录数据”。我还添加了Windows Azure Active Directory,“读取目录数据”。这些状态需要管理员同意“需要管理员”(但在门户中检查)。我的API调用需要一个clientid,所以我如何授予该同意?
  2. 我的连接和获取用户的代码如下所示。我注意到在GetToken方法中运行的代码在“返回client.Users.Where(...”行之后运行,这使我担心在没有调用的情况下调用获取用户的调用(抛出异常的地方)有效的身份验证令牌。我会想到await会处理它。这似乎发生在ADAL库的第2版或第3版。所有的例子似乎都使用类似的语法。有没有办法在前面查看令牌查询以确保正确设置?
  3. 谢谢!

    public IUser FindUser(string username)
    {
        var client = GetClient();
        if (client != null)
        {
            return client.Users.Where(x => x.UserPrincipalName == username).ExecuteSingleAsync().Result;
        }
        else
        {
            return null;
        }
    }
    
    
    private static ActiveDirectoryClient GetClient()
    {
        try
        {
            Uri servicePointUri = new Uri(_graphName);
            Uri serviceRoot = new Uri(servicePointUri, _tenantName);
    
            var client = new ActiveDirectoryClient(serviceRoot, async () => { return await GetToken(servicePointUri); });
    
            return client;
        }
    
        catch (Exception ex) {
            return null;
        }
    
    }
    
    private static async Task<string> GetToken(Uri servicePointUri)
    {
        var authenticationContext = new AuthenticationContext(_authString, false);
        var credentials = new ClientCredential(_clientId, _clientSecret);
        var result = authenticationContext.AcquireToken(servicePointUri.ToString(), credentials);
        return result.AccessToken;
    
    }
    

1 个答案:

答案 0 :(得分:0)

我建议使用Microsoft Graph。您可以在这里找到一个控制台应用程序(而不是MVC ASP.Net Web应用程序):https://github.com/microsoftgraph/console-csharp-snippets-sample

如果坚持继续使用Azure AD Graph,那么还有一个更合适的控制台应用示例。它可以在这里找到:https://github.com/Azure-Samples/active-directory-dotnet-graphapi-console。但同样 - 我强烈建议使用Microsoft Graph。

希望这有帮助,