簡體   English   中英

從 Microsoft Graph 獲取所有用戶

[英]Get all users from Microsoft Graph

我有一個在 Azure Active Directory 中注冊的 ASP.NET MVC 應用程序。 我正在向應用程序添加一項新功能,該功能需要 AAD 中所有用戶的列表。 通過匯總我從各種 MSDN 文檔中獲得的一些代碼片段,這就是我目前獲取用戶的方法:

public async Task GetUsers()
{
    string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
    string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
    string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];

    IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
            .Create(clientId)
            .WithTenantId(tenant)
            .WithClientSecret(clientSecret)
            .Build();

    ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);

    GraphServiceClient graphClient = new GraphServiceClient(authProvider);

    var users = await graphClient.Users.Request().GetAsync();
}

但是,當我運行應用程序時,我得到原始異常:AADSTS7000215:提供了無效的客戶端密碼。 我再次檢查以確保我添加到 web.config 的客戶端密碼與 AAD 中顯示的內容匹配,並且客戶端密碼尚未過期。 我什至刪除了客戶端密碼並創建了一個新密碼,但這也沒有解決問題。 我還確保已為此應用授予了 User.Read.All 類型的 Application 權限。 什么可能導致此錯誤,以及可以采取什么措施來解決它? 另外,我想知道是否有更簡單的方法來獲取用戶列表,因為我已經使用 Owin.IAppBuilder 為這個應用程序設置了身份驗證。 這是我的 Startup.cs 文件中的內容:

    public class Startup
    {
        private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
        private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
        private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
        private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];

        string authority = string.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }

        public void ConfigureAuth(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions()
                {
                    ClientId = clientId,
                    Authority = authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                    Notifications = new OpenIdConnectAuthenticationNotifications
                    {
                        AuthenticationFailed = ctx => {
                            ctx.HandleResponse();
                            ctx.Response.Redirect("/Error/messages" + ctx.Exception.Message);
                            return Task.FromResult(0);
                        }
                } });
        }
    }

它以這種方式對我有用(使用 WithAuthority),我不需要任何額外的范圍:

string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithAuthority(new Uri($"{aadInstance}{tenantId}/"))
    .WithClientSecret(clientSecret)
    .Build();

接着...

return await graphClient.Users
    .Request()
    .GetAsync();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM