AspNet.Security.Oauth.Spotify HttpContext.GetTokenAsync ("spotify", "access_token") Возвращение нулевого токена после второго входа в систему + - PullRequest
0 голосов
/ 06 октября 2019

При использовании шаблона индивидуальной угловой учетной записи ASP.Net core 3.0 и пакета Nuget AspNet.Security.OAuth.Spotify. Когда пользователь входит в систему, я хочу иметь возможность получить маркер доступа к spotify, чтобы я мог выполнять действия от имени пользователя. Однако, когда я вызываю await, ожидаем HttpContext.GetTokenAsync ("spotify", "access_token");результаты возвращают NULL.

Я немного отладил и видел токены spotify при втором + входе в систему в событии options.Events.OnCreatingTicket, но я полагаю, что токен просто не прошел мимо этого? Я не совсем уверен.

Startup.cs ConfigureServices

services.AddAuthentication()
                .AddIdentityServerJwt()
                .AddSpotify("spotify", options =>
                {
                    options.ClientId = Configuration["SpotifySettings:ClientId"];
                    options.ClientSecret = Configuration["SpotifySettings:ClientSecret"];
                    options.CallbackPath = "/callback";
                    options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                    options.SaveTokens = true;

                    String[] items = {
                        "playlist-read-private", "playlist-modify-public", "playlist-modify-private", "playlist-read-collaborative", "user-library-modify", "user-library-read", "user-read-email"
                    };
                    foreach (var item in items)
                    {
                        options.Scope.Add(item);
                    }

                    options.Events.OnRemoteFailure = (context) =>
                    {
                        // Handle failed login attempts here
                        return Task.CompletedTask;
                    };

                    options.Events.OnCreatingTicket = ctx =>
                    {
                        List<AuthenticationToken> tokens = ctx.Properties.GetTokens().ToList();

                        tokens.Add(new AuthenticationToken()
                        {
                            Name = "TicketCreated",
                            Value = DateTime.UtcNow.ToString()
                        });

                        ctx.Properties.StoreTokens(tokens);
                        return Task.CompletedTask;
                    };
                });

Код, чтобы попытаться получить токен

            if (!User.Identity.IsAuthenticated)
            {
                return StatusCode(403);
            }

            var client = httpClientFactory.CreateClient("spotify");
            String spotifyToken = await HttpContext.GetTokenAsync("spotify", "access_token");

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", spotifyToken);

            var result = await client.GetAsync("v1/me/playlists");

Я ожидал получить spotify access_token, которыйЯ могу использовать для вызова API spotify, но spotifyToken просто возвращает ноль.

...