Получите всех пользователей из Microsoft Graph - PullRequest
2 голосов
/ 08 июля 2020

У меня есть приложение ASP. NET MVC, которое зарегистрировано в Azure Active Directory. Я добавляю в приложение новую функцию, для которой потребуется список всех пользователей из 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);
                        }
                } });
        }
    }

1 Ответ

0 голосов
/ 08 июля 2020

У меня работает так (с помощью 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...