Spotify авторизация логин звонок в неправильный URL - PullRequest
0 голосов
/ 18 июня 2019

Я работаю над простым веб-приложением для отображения моей текущей воспроизводимой песни. Я настроил учетную запись Spotify, получил ClientId и клиентский секрет. Я пытаюсь запросить исходный токен для дальнейшего взаимодействия с API-интерфейсом spotify.

Я показываю полученный html для входа в систему, я пытаюсь войти в систему, но ничего не происходит, он просто говорит «Что-то пошло не так ...» над формой входа. В этот момент я проверил панель инструментов spotify и внес в белый список все локальные URL-адреса обратных вызовов, но я все еще получаю это сообщение, и ничего не происходит. Я проверил инструменты разработчика браузера и увидел что-то странное (по крайней мере, я верю, что это странно). Входящий вызов перенаправляет на "https://losthost:5001/api/login", что приводит к 404.

public async Task<IActionResult> Connect()
{
    var client = new HttpClient();
    var clientId = "clientId";

    var redirectUrl = HttpUtility.UrlEncode("http://localhost:5000/Spotify/Callback/");
    var url = $"client_Id={clientId}&response_type=code&redirect_uri={redirectUrl}";

    var result = await client.GetAsync($"https://accounts.spotify.com/authorize?{url}");

    if (result.Content.Headers.ContentType.MediaType == "text/html"){
        var spotifyLoginHtml = await result.Content.ReadAsStringAsync();

        return new ContentResult()
        {
            Content = spotifyLoginHtml,
            ContentType = "text/html",
        };
    }
    else
    {
        //var accessToken = await result.Content.ReadAsStringAsync();
        //return RedirectToAction("DevicesSelection");
    }   

    return View();         
}

Я думаю, что моя проблема в неправильном входящем звонке из html-файла spotify, но я не знаю, почему это происходит или как это исправить.

Edit: Добавлено изображение с начальной ошибкой (Uncaught in обещание) и неправильным вызовом API / логина Chrome Dev tool Errors

1 Ответ

1 голос
/ 19 июня 2019

redirect_uri:

URI для перенаправления после того, как пользователь предоставит или отклонит разрешение.Этот URI должен быть введен в белый список URI перенаправления, который вы указали при регистрации приложения.Значение redirect_uri здесь должно точно соответствовать одному из значений, введенных вами при регистрации приложения, включая верхний или нижний регистр, завершающие косые черты и т. Д.

Spotify предоставляет статья доступна который охватывает настройку аутентификации и авторизации, а также пошаговую последовательность действий.

Так что, если http://localhost:5000/Spotify/Callback/ является вашим URL-адресом для перенаправления, вы должны сначала добавить URL-адрес в белый список Redirect URI на панели мониторинга:

enter image description here

И в вашем приложении должны быть совпадения маршрутов http://localhost:5000/Spotify/Callback/, чтобы получить код через строку запроса, а затем использовать код для получения токена доступа для доступа к API-интерфейсам Spotify.Вот пример кода:

class SpotifyAuthentication
{
    public string clientID = "xxxxxxxxxxxxxxxxxxxxx";
    public string clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    public string redirectURL = "https://localhost:44363/callback";
}

public class HomeController : Controller
{
    SpotifyAuthentication sAuth = new SpotifyAuthentication();

    [HttpGet]
    public ContentResult Get()
    {
        var qb = new QueryBuilder();
        qb.Add("response_type", "code");
        qb.Add("client_id", sAuth.clientID);
        qb.Add("scope", "user-read-private user-read-email");
        qb.Add("redirect_uri", sAuth.redirectURL);

        return new ContentResult
        {
            ContentType = "text/html",
            Content = @"
                <!DOCTYPE html>
                <html>
                    <head>
                        <meta charset=""utf-8"">
                        <title>Spotify Auth Example</title>
                    </head>
                    <body>
                        <a href=""https://accounts.spotify.com/authorize/" + qb.ToQueryString().ToString() + @"""><button>Authenticate at Spotify</button></a>
                    </body>
                </html>
            "
        };
    }

    [Route("/callback")]
    public ContentResult Get(string code)
    {
        string responseString = "";

        if (code.Length > 0)
        {
            using (HttpClient client = new HttpClient())
            {
                Console.WriteLine(Environment.NewLine + "Your basic bearer: " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(sAuth.clientID + ":" + sAuth.clientSecret)));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(sAuth.clientID + ":" + sAuth.clientSecret)));

                FormUrlEncodedContent formContent = new FormUrlEncodedContent(new[]
                {
                    new KeyValuePair<string, string>("code", code),
                    new KeyValuePair<string, string>("redirect_uri", sAuth.redirectURL),
                    new KeyValuePair<string, string>("grant_type", "authorization_code"),
                });

                var response = client.PostAsync("https://accounts.spotify.com/api/token", formContent).Result;

                var responseContent = response.Content;
                responseString = responseContent.ReadAsStringAsync().Result;
            }
        }

        return new ContentResult
        {
            ContentType = "application/json",
            Content = responseString
        };
    }
}

Ссылка на код: https://github.com/bmsimons/dotnet-core-spotify-authentication и blog .

И, конечно, вы можете использовать промежуточное ПО Spotify, здесь - пример кода.

...