如何在 .NET Core 中对 Spotify 进行经过身份验证的调用

Posted

技术标签:

【中文标题】如何在 .NET Core 中对 Spotify 进行经过身份验证的调用【英文标题】:How to make authenticated calls to Spotify in .NET Core 【发布时间】:2017-07-13 08:54:39 【问题描述】:

我正在尝试使用 Spotify Web API 来获取有关歌曲分析的信息。这需要有一个访问令牌才能对端点进行调用。

到目前为止,我已经使用个人用户帐户模板创建了一个基本的 .NET Core 应用程序,这样我就可以通过 Spotify 将用户登录到我的应用程序,然后使用访问和刷新令牌来调用 API。我可以成功让我的用户登录到应用程序并请求他们的用户信息,但我似乎不知道如何保存令牌以便再次使用它们。

app.UseSpotifyAuthentication(new AspNet.Security.OAuth.Spotify.SpotifyAuthenticationOptions
        
            ClientId = Configuration["Authentication:Spotify:ClientId"],
            ClientSecret = Configuration["Authentication:Spotify:ClientSecret"],
            SaveTokens = true,
            Scope =  "playlist-read-private", "playlist-modify-private", "user-library-read" ,
            UserInformationEndpoint = "https://api.spotify.com/v1/me",

            Events = new OAuthEvents
            
                OnCreatingTicket = async context =>
                
                    var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);

                    var response = await context.Backchannel.SendAsync(request, context.HttpContext.RequestAborted);
                    response.EnsureSuccessStatusCode();

                    var user = JObject.Parse(await response.Content.ReadAsStringAsync());

                    var name = user.Value<string>("display_name");
                    if(!string.IsNullOrEmpty(name))
                    
                        context.Identity.AddClaim(new Claim(ClaimTypes.Name, name, ClaimValueTypes.String, context.Options.ClaimsIssuer));
                    
                                    
            
        );

上面是 Configure 方法中的代码,它启用了我从 aspnet-contrib 存储库获得的 Spotify 中间件。我将SaveTokens 设置为true,但我对它们的保存位置有点迷茫,因为我在SQL 对象资源管理器中看不到它们。

我的猜测是在 Controller 类中运行 Challenge 方法以每次触发 OnCreatingTicket OAuth 事件并将我返回的信息保存在模型中,但我不完全确定这是否是 A。正确的做事方式和 B. 如果考虑到我返回控制器后需要维护模型内容,这是否可行。

我到处搜索,似乎 .NET Core 可能仍然太新,无法提供任何文档,除非我只是略过它。任何帮助或指导将不胜感激。

【问题讨论】:

【参考方案1】:

您只需拨打await HttpContext.GetTokenAsync("Spotify", "access_token"); 即可从任何地方获取令牌。

【讨论】:

以上是关于如何在 .NET Core 中对 Spotify 进行经过身份验证的调用的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

Linq 查询在 ASP.NET-Core 3.0 及更高版本中对数字等字符串进行排序

在 Spotify 高级搜索中对运算符进行分组

有没有办法在.net core 中对 F# 项目进行单元测试?

禁止在 ASP.NET Core 中对 API URL 进行重定向

Net Core:在Xunit Test中对AppService、Repository等执行所有依赖注入