Authorization Code
This flow is suitable for long-running applications in which the user grants permission only once. It provides an access token that can be refreshed. Since the token exchange involves sending your secret key, perform this on a secure location, like a backend service, and not from a client such as a browser or from a mobile app.
Existing Web-Server
If you are already in control of a Web-Server (like ASP.NET
), you can start the flow by generating a login uri:
// Make sure "http://localhost:5543" is in your applications redirect URIs!
var loginRequest = new LoginRequest(
new Uri("http://localhost:5543"),
"ClientId",
LoginRequest.ResponseType.Code
)
{
Scope = new[] { Scopes.PlaylistReadPrivate, Scopes.PlaylistReadCollaborative }
};
var uri = loginRequest.ToUri();
// Redirect user to uri via your favorite web-server
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to http://localhost:5543
and a code
parameter is attached to the query. This code
has to be exchanged for an access_token
and refresh_token
:
// This method should be called from your web-server when the user visits "http://localhost:5543"
public Task GetCallback(string code)
{
var response = await new OAuthClient().RequestToken(
new AuthorizationCodeTokenRequest("ClientId", "ClientSecret", code, "http://localhost:5543")
);
var spotify = new SpotifyClient(response.AccessToken);
// Also important for later: response.RefreshToken
}
If the token expires at some point (check via response.IsExpired
), you can refresh it:
var newResponse = await new OAuthClient().RequestToken(
new AuthorizationCodeRefreshRequest("ClientId", "ClientSecret", response.RefreshToken)
);
var spotify = new SpotifyClient(newResponse.AccessToken);
You can also let the AuthorizationCodeAuthenticator
take care of the refresh part:
var response = await new OAuthClient().RequestToken(
new AuthorizationCodeTokenRequest("ClientId", "ClientSecret", code, "http://localhost:5543")
);
var config = SpotifyClientConfig
.CreateDefault()
.WithAuthenticator(new AuthorizationCodeAuthenticator("ClientId", "ClientSecret", response));
var spotify = new SpotifyClient(config);
For a real example, have a look at Example.ASP. This also uses the great package AspNet.Security.OAuth.Spotify
which takes care of the OAuth flow inside of ASP.NET
.