(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{191:function(t,e,s){"use strict";s.r(e);vara=s(0),n=Object(a.a)({},function(){vart=this,e=t.$createElement,s=t._self._c||e;returns("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"tokenswapauth"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tokenswapauth","aria-hidden":"true"}},[t._v("#")]),t._v(" TokenSwapAuth")]),t._v(" "),s("p",[t._v("This way uses server-side code or at least access to an exchange server, otherwise, compared to other\nmethods, it is impossible to use.")]),t._v(" "),s("p",[t._v('With this approach, you provide the URI/URL to your desired exchange server to perform all necessary\nrequests to Spotify, as well as requests that return back to the "server URI".')]),t._v(" "),s("p",[t._v("The exchange server "),s("strong",[t._v("must")]),t._v(" be able to:")]),t._v(" "),s("ul",[s("li",[t._v('Return the authorization code from Spotify API authenticate page via GET request to the "server URI".')]),t._v(" "),s("li",[t._v("Request the token response object via POST to the Spotify API token page.")]),t._v(" "),s("li",[t._v("Request a refreshed token response object via POST to the Spotify API token page.")])]),t._v(" "),s("p",[s("strong",[t._v("The good news is that you do not need to code it yourself.")])]),t._v(" "),s("p",[t._v("The advantages of this method are that the client ID and redirect URI are very well hidden and almost unexposed, but more importantly, your client secret is "),s("strong",[t._v("never")]),t._v(" exposed and is completely hidden compared to other methods (excluding "),s("a",{attrs:{href:"/SpotifyWebAPI/auth#implicitgrantauth"}},[t._v("ImplicitGrantAuth")]),t._v("\nas it does not deal with a client secret). This means\nyour Spotify app "),s("strong",[t._v("cannot")]),t._v(" be spoofed by a malicious third party.")]),t._v(" "),s("h2",{attrs:{id:"using-tokenswapwebapifactory"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#using-tokenswapwebapifactory","aria-hidden":"true"}},[t._v("#")]),t._v(" Using TokenSwapWebAPIFactory")]),t._v(" "),s("p",[t._v("The TokenSwapWebAPIFactory will create and configure a SpotifyWebAPI object for you.")]),t._v(" "),s("p",[t._v("It does this through the method GetWebApiAsync "),s("strong",[t._v("asynchronously")]),t._v(", which means it will not halt execution of your program while obtaining it for you. If you would like to halt execution, which is "),s("strong",[t._v("synchronous")]),t._v(", use "),s("code",[t._v("GetWebApiAsync().Result")]),t._v(" without using "),s("strong",[t._v("await")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-csharp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-csharp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TokenSwapWebAPIFactory")]),t._v(" webApiFactory"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SpotifyWebAPI")]),t._v(" spotify"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// You should store a reference to WebAPIFactory if you are using AutoRefresh or want to manually refresh it later on. New WebAPIFactory objects cannot refresh SpotifyWebAPI object that they did not give to you.")]),t._v("\nwebApiFactory "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TokenSwapWebAPIFactory")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"INSERT LINK TO YOUR index.php HERE"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Scope "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Scope"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Us