API Azure AD Graph и аутентификация WsFederation

Я пытаюсь реализовать API-интерфейс Azure AD Graph в веб-приложении MVC, размещенном в Azure. Azure AD настроен правильно, так как я смог использовать Graph API в прошлом году в предыдущей версии, прежде чем он был обновлен в какой-то момент в конце прошлого года/в этом году.

Я следую инструкциям здесь https://github.com/AzureADSamples/WebApp-GraphAPI-DotNet и используя обновленный код. Разница между этими двумя проектами в том, что я использую WsFed, а не OpenID, поэтому некоторые части отличаются, а именно Startup.Auth.cs. Вот соответствующий код в этом примере проекта (см. ">здесь):

Notifications = new OpenIdConnectAuthenticationNotifications()
{                      
    AuthorizationCodeReceived = (context) =>
    {
        var code = context.Code;
        ClientCredential credential = new ClientCredential(clientId, appKey);
        string userObjectID = context.AuthenticationTicket.Identity.FindFirst(
                "http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
        AuthenticationContext authContext = new AuthenticationContext(Authority, new NaiveSessionCache(userObjectID));
        AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
            code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);
        AuthenticationHelper.token = result.AccessToken;
        return Task.FromResult(0);
    }
}

Однако, поскольку на моем веб-сайте установлено, что вы должны войти в систему через WS-Fed, чтобы вообще получить доступ к чему-либо на сайте, я пытаюсь получить токен в Startup.Auth.cs. так что я могу просто использовать AcquireTokenSilent позже. Я использую проект здесь https://github.com/AzureADSamples/WebApp-WSFederation-DotNet для настройки WS-Fed.

Проблема в Startup. Auth.cs заключается в том, что у меня нет доступа к параметру AuthorizationCodeReceived, только SecurityTokenReceived и SecurityTokenValidated. Ни один из них не дает хорошего варианта для кода доступа или чего-либо, что я могу использовать для запроса Graph API позже в моем приложении. Как мне это сделать? Мы будем очень признательны за любые рекомендации.


person Kevin Sullivan    schedule 18.06.2015    source источник


Ответы (2)


к сожалению, в протоколе WS-Federation нет концепции клиента и токена доступа - единственный торгуемый токен - это тот, который отправляется вам для входа в систему, и код авторизации не генерируется. Если вам нужно вызвать Graph API, я настоятельно рекомендую переключиться на OpenId Connect (который обрабатывает получение токена доступа, используя логику, о которой вы сообщили выше). Если вы абсолютно не можете отключиться от ws-fed, вам нужно выполнить потоки OAuth2 вручную. На практике это означает использование кода с сайта https://github.com/AzureADSamples/WebApp-WebAPI-OAuth2-AppIdentity-DotNet или https://github.com/AzureADSamples/WebApp-WebAPI-OAuth2-UserIdentity-DotNet и поместите его поверх своего приложения. Это не очень простая задача, поэтому я придерживаюсь своей рекомендации воспользоваться интегрированным потоком, предлагаемым OpenId Connect. ХТ В.

person vibronet    schedule 18.06.2015

Мне удалось получить токен доступа Microsoft Graph, используя этот метод: выполните POST на стороне сервера для конечной точки вашего приложения oauth2/token https://login.microsoftonline.com/{tenantId}/oauth2/token со следующими параметрами:

grant_type=client_credentials
&client_id=<clientId>
&client_secret=<clientSecret>
&resource=https://graph.microsoft.com

В приведенном выше примере <clientSecret> — это действительный ключ приложения, сгенерированный на портале управления Azure.

Метод, как описано здесь: https://graph.microsoft.io/en-us/docs/authorization/app_only

person Berend Engelbrecht    schedule 28.02.2017