Как получить токен доступа AD и передать его в контроллер web api? - PullRequest
0 голосов
/ 30 марта 2020

Как получить токен доступа AD с login.microsoftonline.com и передать токен доступа в контроллер web api? так как мне нужен «токен доступа» как таковой, чтобы передать URL веб-сайта другой компании-партнера через почтовый запрос.

Ниже кода выполняется аутентификация AAD, как и ожидалось, но также мне нужен «токен доступа» как таковой,

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options));

        services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
        {
            options.Authority = options.Authority + "/v2.0/";


            options.TokenValidationParameters.ValidateIssuer = false;
        });

        services.AddMvc(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        })
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

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

Как защитить веб-API, созданный с помощью ASP . NET Core

Как только вы сможете запустить образец, вы можете заменить Web Api образца на Web Api вашего партнера.

0 голосов
/ 01 апреля 2020

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

Вы можете получить токены после аутентификации:

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority = options.Authority + "/v2.0/";         // Microsoft identity platform
    options.SaveTokens = true;
    options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
});

И получить токены в контроллере:

var idToken = await HttpContext.GetTokenAsync("id_token"); 

Но с вашими фрагментами кода он не вернется токен доступа, поскольку вы выполняете процесс входа, а не запрос токена. Вы должны использовать ADAL / MSAL для получения токена доступа для доступа к защищенным API. Смотрите примеры кода здесь .

, где я получаю токен доступа и проверяю его, используя пользовательский код для лучшего понимания.

Вы можете понять проверку подписи токена из здесь и здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...