2015-06-18 5 views
0

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

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

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. Ни один из них не дает хороший вариант для кода доступа или всего, что я могу использовать для запроса API Графа позже в моем приложении. Как мне это сделать? Любое руководство будет высоко оценено.

ответ

0

К сожалению, протокол WS-Federation не имеет понятия о клиенте и токене доступа - единственным торговым маркером является тот, который был отправлен вам для входа в систему, и код авторизации не генерируется. Если вам нужно вызвать API-интерфейс Graph, я настоятельно рекомендую переключиться на 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. НТН В.

0

мне удалось получить маркер доступа Microsoft Graph, с помощью этого метода: ли на стороне сервера POST для OAuth2 вашего приложения/маркер конечной точки 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

Смежные вопросы