Отправка запросов в Azure Management - PullRequest
1 голос
/ 27 марта 2019

Я завершил руководство, чтобы добавить аутентификацию Azure AD в свое приложение:

https://azure.microsoft.com/en-gb/resources/samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/

и может успешно войти в систему, иметь участника службы, и все работает как положено.

Теперь я хочу сделать веб-запросы от имени пользователя, но не вижу, как получить данные для аутентификации для отправки в запросе, я пытался просмотреть объект ClaimsPrincipal.Current, но ничего не могу передать к HTTP-клиенту, чтобы сделать запрос.

1 Ответ

1 голос
/ 28 марта 2019

Образец веб-приложения, на которое вы ссылались, только регистрирует пользователя, но вам необходимо получить токен доступа от имени этого пользователя для доступа к API.

Вы можете обратиться к этому образцу . Этот пример вызывает другой webapi, вы можете игнорировать эту часть, просто измените ресурс на https://management.core.windows.net/

    public void Configure(string name, OpenIdConnectOptions options)
    {
        options.ClientId = _azureOptions.ClientId;
        options.Authority = _azureOptions.Authority;
        options.UseTokenLifetime = true;
        options.CallbackPath = _azureOptions.CallbackPath;
        options.RequireHttpsMetadata = false;
        options.ClientSecret = _azureOptions.ClientSecret;
        options.Resource = "https://management.core.windows.net/"; // management api
        options.ResponseType = "id_token code";

        // Subscribing to the OIDC events
        options.Events.OnAuthorizationCodeReceived = OnAuthorizationCodeReceived;
        options.Events.OnAuthenticationFailed = OnAuthenticationFailed;
    }

    private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedContext context)
    {
        // Acquire a Token for the management API 
        string userObjectId = (context.Principal.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;
        var authContext = new AuthenticationContext(context.Options.Authority, new NaiveSessionCache(userObjectId, context.HttpContext.Session));
        var credential = new ClientCredential(context.Options.ClientId, context.Options.ClientSecret);
        var authResult = await authContext.AcquireTokenAsync(context.Options.Resource,credential);
        // Notify the OIDC middleware that we already took care of code redemption.
        context.HandleCodeRedemption(authResult.AccessToken, context.ProtocolMessage.IdToken);
    }
...