Spotify Redirect 在参数前添加字符

Posted

技术标签:

【中文标题】Spotify Redirect 在参数前添加字符【英文标题】:Spotify Redirect adds character before parameters 【发布时间】:2020-02-15 10:16:19 【问题描述】:

问题

我目前正在创建一个 ASP.NET 应用程序,让用户在使用 Spotify Web API 之前登录到 Spotify。

在调用 API 时,您需要指定 response_type、client_id、scope、redirect_uri 和 state。当您拨打电话时,它会将您重定向到“redirect_uri”,并将用户信息作为 json 中的参数,因为我想使用 WPF Web 浏览器,我必须将其添加到我的代码中以允许 IE 查看 JSON(更多信息 @987654321 @)。

   private bool SetRegistery()
    
        try
        
            using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64))
            
                using (RegistryKey key = hklm.OpenSubKey(@"MIME\Database\Content Type\application/json", true))
                
                    if (key != null)
                    
                        key.SetValue("CLSID", "25336920-03F9-11cf-8FD0-00AA00686F13");
                        key.SetValue("Encoding", new byte[]  0x80, 0x00, 0x00, 0x00 );
                    
                
            
            return true;
        
        catch (Exception ex)
        
            MessageBox.Show(ex.Message);
        
        return false;
    

我先去的网址是:

https://accounts.spotify.com/authorize?response_type=token&client_id=...&scope=user-read-private+user-read-email&redirect_uri=http%3A%2F%2Fhttpbin.org%2Fget&state=...

重定向 URI 是 http://httpbin.org/get,它只是用传递的 JSON 响应,但是当 spotify API 将我重定向到 url 时:

http://httpbin.org/get#access_token=...&token_type=Bearer&expires_in=3600&state=...

而不是参数之间的#,它假设是一个?,手动更正它会给我我需要的结果。

http://httpbin.org/get?access_token=...&token_type=Bearer&expires_in=3600&state=...

网址生成

        SpotifyAuthentication spotifyAuth = new SpotifyAuthentication();
        string scope = "user-read-private user-read-email";
        string redirect_uri = "http://httpbin.org/get";
        string state = randomString(16);
        string url = "https://accounts.spotify.com/authorize";
        url += "?response_type=token";
        url += "&client_id=" + WebUtility.UrlEncode(spotifyAuth.clientID);
        url += "&scope=" + WebUtility.UrlEncode(scope);
        url += "&redirect_uri=" + WebUtility.UrlEncode(redirect_uri);
        url += "&state=" + WebUtility.UrlEncode(state);
        authenticationBrowser.Url = new System.Uri(url);
        Debug.WriteLine(new System.Uri(url));

我尝试过的事情

当我将 Spotify URL 复制到浏览器中时,结果相同 这意味着它不在我的客户端,可能在我上面的 URL 生成中。 我已尝试编辑浏览器的导航事件以在重定向之前编辑 url,但由于某种原因,该函数未检测到重定向。

【问题讨论】:

【参考方案1】:

您似乎在描述的是来自Authorisation Guide 的隐式授权流,其中最终重定向 URL 是一个哈希片段 - 用 # 表示,而不是查询字符串?反而。这是正确的行为 - 您应该能够通过获取包含重定向值的 Url.Fragment 值从 WPF Web 浏览器读取这些值,但是如果出现错误或用户拒绝请求,这将是一个查询字符串值如您所愿。

【讨论】:

由于导航事件由于某种原因未显示该 URL,我无法检测我是否已被重定向到该 URL。 我只是在导航功能中做了一个Debug.WriteLine(e.Url.ToString());,但它没有输出httpget url。 这很奇怪,应该可以检测到重定向 - URL 会以这种方式格式化但不应该有任何问题,我之前没有在 ASP.NET 中完成这个确切的流程所以那里可能会有所不同,但是如果您导航到第一个 Spotify URL,您将在 WPF 浏览器中正确重定向,就像在 UWP 浏览器中所做的那样,原理应该是相同的 奇怪的是,我只是尝试使用导航事件并输出正确的 URL,重定向不算作导航事件吗?我想知道为什么会这样。 很好,导航事件可能在重定向时没有被正确触发。对于我自己的 Spotify 示例,我使用的是 WebView_NavigationCompleted

以上是关于Spotify Redirect 在参数前添加字符的主要内容,如果未能解决你的问题,请参考以下文章

Spotify API 非法 redirect_uri

spotify 的重定向 URI 无效

如何从我的应用程序中退出 Spotify?

向 Instagram auth redirect_uri 添加查询参数不起作用?

keycloak 无效参数:redirect_uri 在反向代理后面

AWS Cognito 注销 URL 格式 - 不存在必需的字符串参数“redirect_uri”