Чтобы получить токен доступа
Я создал приложение MVC, чтобы передать работу другому человеку в моей организации. Я добавил всех членов своей организации в AAD и зарегистрировал там приложение, создал службу приложений и связал эту службу приложений с зарегистрированным приложением с включенным SSO.
Теперь каждый раз, когда кто-то посещает приложение, он может успешно войти в систему, используя соответствующие учетные данные.
То, что я хочу знать, - это извлечь всех участников из моего AAD и отобразить их в раскрывающемся списке, чтобы любой мог перейти к другим, просто заглянув в раскрывающийся список.
Я попытался с помощью примера графа SDK получить имя пользователя в моей организации с этим кодом
private string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];
private string appId = ConfigurationManager.AppSettings["ida:AppId"];
private string appSecret = ConfigurationManager.AppSettings["ida:AppSecret"];
private string scopes = ConfigurationManager.AppSettings["ida:GraphScopes"];
public async Task<string> GetUserAccessTokenAsync()
{
string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
HttpContextWrapper httpContext = new HttpContextWrapper(HttpContext.Current);
TokenCache userTokenCache = new SessionTokenCache(signedInUserID, httpContext).GetMsalCacheInstance();
//var cachedItems = tokenCache.ReadItems(appId); // see what's in the cache
ConfidentialClientApplication cca = new ConfidentialClientApplication(
appId,
redirectUri,
new ClientCredential(appSecret),
userTokenCache,
null);
try
{
AuthenticationResult result = await cca.AcquireTokenSilentAsync(scopes.Split(new char[] { ' ' }), cca.Users.First());
return result.AccessToken;
}
// Unable to retrieve the access token silently.
catch (Exception)
{
HttpContext.Current.Request.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties() { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
throw new ServiceException(
new Error
{
Code = GraphErrorCode.AuthenticationFailure.ToString(),
Message = Resource.Error_AuthChallengeNeeded,
});
}
}
с некоторыми изменениями в области.
<add key="ida:AppId" value="xxxxx-xxxxxxx-xxxxxx-xxxxxxx"/>
<add key="ida:AppSecret" value="xxxxxxxxxxx"/>
<add key="ida:RedirectUri" value="http://localhost:55065/"/>
<add key="ida:GraphScopes" value="User.ReadBasic.All User.Read Mail.Send Files.ReadWrite"/>
Это позволяет мне получить основные сведения обо всех пользователях в моей организации. Но как я могу добиться этого в своем приложении, где связанные с аутентификацией материалы выполняются только в Azure, и нет кода для аутентификации и авторизации во всем решении.
Спасибо
Субхам, Натхорп, Индия
1 ответ
Но как я могу добиться этого в своем приложении, где связанные с аутентификацией материалы выполняются только в Azure, и нет кода для аутентификации и авторизации во всем решении.
Насколько я понимаю, вы используете встроенную функцию аутентификации / авторизации службы приложений. Вы можете выполнить здесь настройку веб-приложения для использования входа в AAD. И вам необходимо настроить необходимые разрешения для вашего приложения AD следующим образом:
Примечание. Для графика Azure AD необходимо установить соответствующие разрешения для API-интерфейса Windows Azure Active Directory. Для Microsoft Graph вам необходимо настроить Microsoft Graph API.
Затем вам нужно настроить дополнительные параметры для вашего веб-приложения. Вы можете получить доступ к https://resources.azure.com/, выбрать свое веб-приложение и обновить конфигурацию аутентификации службы приложений следующим образом:
Примечание. Для использования Microsoft Graph API необходимо установить resource
в https://graph.microsoft.com
, Подробности, вы можете следить здесь.
Для получения токена доступа в вашем приложении вы можете получить его из заголовка запроса X-MS-TOKEN-AAD-ACCESS-TOKEN
, Подробности, вы можете следить за работой с идентификационными данными пользователей в вашем приложении.
Кроме того, вы могли бы использовать пакет https://www.nuget.org/packages/Microsoft.Azure.ActiveDirectory.GraphClient/ для API-интерфейса Microsoft Azure Active Directory Graph, пакет Microsoft.Graph для Microsoft Graph API-интерфейса, используя соответствующий токен доступа.