Вызов графа Azure Active Directory при попытке доступа к сохраненному токену в пользовательском компоненте ASP.NET Core 2.1 - PullRequest
0 голосов
/ 25 сентября 2018

Вызов графа Azure Active Directory с токеном авторизации, пытающимся получить доступ к сохраненному токену в пользовательском компоненте ASP.NET Core 2.1

Если имеется больше групп, тогда информация AAD содержит ссылку на API-графа, которую я должен вызывать извне с использованием авторизациимаркер.В настоящее время я пытаюсь сохранить токен, используя options.SaveTokens = true; в опциях openidconnection (при запуске).Я пытаюсь получить доступ к сохраненному токену в пользовательских компонентах.У вас есть идеи, как получить к нему доступ в asp.net core 2.1? см. Пользовательские компоненты

Я использовал HttpContext.GetTokenAsync("access_token") подход, но он не работает в .NET Core 2.1

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(options => {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddOpenIdConnect(options => {
        options.SaveTokens = true;
    });
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    services.AddHttpContextAccessor();
    services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
}

Пользовательский компонент:

public class ClaimsTransformer : IClaimsTransformation
    {
        private readonly IHttpContextAccessor _httpContextAccessor;

        public ClaimsTransformer(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }
        public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
        {
            try
            {
                if (principal.Identity.IsAuthenticated == true)
                {
                    string accessToken = await _httpContextAccessor.HttpContext.GetTokenAsync("access_token"); //Gives stack overflow error
                    string idToken = await _httpContextAccessor.HttpContext.GetTokenAsync("id_token");
                }
            }
            catch (Exception ex)
            {
                Console.Write("Exception", ex);
            }
            return await Task.FromResult(principal);
        }
    }
...