Как получить идентификатор пользователя и токен доступа в microsoft graph api c#

Я пытаюсь создать мультитенантное приложение, которое позволит пользователям получать доступ к их OneDrive. Из-за типа устройства, на котором будет работать приложение, нецелесообразно заставлять пользователей вводить свое имя пользователя и пароль каждый раз, когда они обращаются к приложению, поэтому я собирался настроить приложение, чтобы администратор мог предоставлять разрешения от имени их пользователей, использующих только разрешения приложения (у меня есть бит согласия администратора).

У меня сейчас проблемы с тем, что когда пользователь обращается к приложению, у меня есть только его адрес электронной почты.

Как я могу получить токен доступа на основе адреса электронной почты пользователя без необходимости входа в систему (их администратор уже дал согласие, поэтому пользователь не должен этого делать)?

1
0
2 783
2

Ответы 2

Если администратор уже дал согласие, вы можете использовать возможность войти без пользователя и получить токен.

Как мне получить OneDrive?

  1. Вы указали, что у вас есть электронная почта пользователя, поэтому вы можете выполнить запрос https://graph.microsoft.com/v1.0/users/{email address} и взять значение поля id.
  2. Выполните запрос https://graph.microsoft.com/v1.0/users/{user id}/drive и у вас есть привод пользователя.

Я действительно думал, что вызов https://graph.microsoft.com/v1.0/users/{email address} будет способом получить идентификатор пользователя. Я не понимаю, что вам нужен идентификатор арендатора, чтобы получить токен доступа, прежде чем вы сможете его вызвать, или я ошибаюсь?

Andy Groat 13.08.2018 10:02

Энди

Согласно эта ссылка мы можем получить AccessToken некоторыми фоновыми службами или демонами.

Основываясь на моем тесте, мы можем попробовать следующие шаги:
1. Получите согласие администратора:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
         ClientId = clientId,
         Authority = authority,
         RedirectUri = redirectUri,
         PostLogoutRedirectUri = redirectUri,
         Scope = "openid profile",
         ResponseType = "id_token",
         TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, NameClaimType = "name" },
         Notifications = new OpenIdConnectAuthenticationNotifications
                             {
                                    AuthenticationFailed = this.OnAuthenticationFailedAsync,
                                    SecurityTokenValidated = this.OnSecurityTokenValidatedAsync
                              }
   });

ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(Startup.clientId, string.Format(AuthorityFormat, tenantId), Startup.redirectUri,
                                                                                       new ClientCredential(Startup.clientSecret), null, appTokenCache.GetMsalCacheInstance());

AuthenticationResult authResult = ожидание daemonClient.AcquireTokenForClientAsync (новый [] {MSGraphScope});

  1. Мы можем получить пользователя по электронной почте с URL-адреса: https://graph.microsoft.com/v1.0/users/{userPrincipalName}. Например, https://graph.microsoft.com/v1.0/users/xxx.outlook.com

Для получения дополнительной информации мы можем обратиться к Пример демона v2.0 на GitHub.

Это сработает, если у вас уже есть идентификатор клиента, но, к сожалению, у меня его нет, есть ли способ узнать идентификатор клиента или можно получить токен доступа с конечной точки /common?

Andy Groat 13.08.2018 10:06

У вас проблемы с поиском идентификатора арендатора? Если это так, вы можете узнать идентификатор арендатора по URL-адресу: ссылка на сайт. Если я неправильно понял, что вы имеете в виду, дайте мне знать.

Keen Jin 13.08.2018 10:48

Пользователи будут входить в систему на устройстве, проводя по карте, которая показывает только их адрес электронной почты, поэтому мне нужно иметь возможность получить идентификатор клиента, а затем я смогу запросить пользователей, чтобы получить идентификатор пользователя. .

Andy Groat 13.08.2018 10:55

В простом коде идентификатор клиента может быть UserController/Index. Или вы можете запросить URL-адрес https://login.windows.net/{your company}.onmicrosoft.com/.well-known/openid-configuration, чтобы получить идентификатор арендатора. Параметр "ваша компания" можно получить по электронной почте пользователя. Например, электронная почта пользователя, такая как xxx@kegen.onmicrosoft.com, параметр компании будет kegen. Будет возвращена пачка данных, и прямо в первой строке будет ваш ID арендатора. Добавьте эту ссылку в закладки, и вы получите ее в считанные секунды, когда она вам понадобится.

Keen Jin 13.08.2018 11:28

Другие вопросы по теме