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 在参数前添加字符的主要内容,如果未能解决你的问题,请参考以下文章
向 Instagram auth redirect_uri 添加查询参数不起作用?