Explorar el Código

token is stored after authorization in session storage

tags/v1.1.0^2
anastasijasavov hace 3 años
padre
commit
3aebcdb2be

+ 3
- 3
GrpcShared/DTO/Auth/TokenResponse.cs Ver fichero

public class TokenResponse public class TokenResponse
{ {
[ProtoMember(1)] [ProtoMember(1)]
public string? AccessToken { get; set; }
public string? access_token { get; set; }
[ProtoMember(2)] [ProtoMember(2)]
public string? RefreshToken{ get; set; }
public string? refresh_token{ get; set; }
[ProtoMember(3)] [ProtoMember(3)]
public int? ExpiresIn { get; set; }
public int? expires_in { get; set; }
} }
} }

+ 9
- 6
IdentityProvider/Services/AuthService.cs Ver fichero



string url = "https://accounts.spotify.com/api/token"; string url = "https://accounts.spotify.com/api/token";
http.BaseAddress = new Uri(url); http.BaseAddress = new Uri(url);

//get client id and secret from appsettings, convert to base64 and set as header //get client id and secret from appsettings, convert to base64 and set as header
var secrets = await GetAuthParams(); var secrets = await GetAuthParams();
byte[] contentType = Encoding.UTF8.GetBytes($"{secrets.ClientId}:{secrets.ClientSecret}"); byte[] contentType = Encoding.UTF8.GetBytes($"{secrets.ClientId}:{secrets.ClientSecret}");
tokenRequest.redirect_uri = secrets.RedirectURI;


//AUTHORIZATION HEADER
http.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Basic " + Convert.ToBase64String(contentType)); http.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Basic " + Convert.ToBase64String(contentType));


//ACCEPT HEADER //ACCEPT HEADER
var requestBody = new Dictionary<string, string>(); var requestBody = new Dictionary<string, string>();
requestBody["grant_type"] = tokenRequest.grant_type; requestBody["grant_type"] = tokenRequest.grant_type;
requestBody["code"] = tokenRequest.code!; requestBody["code"] = tokenRequest.code!;
requestBody["redirect_uri"] = secrets.RedirectURI!;
requestBody["redirect_uri"] = tokenRequest.redirect_uri!;


var response = await http.PostAsync(url, new FormUrlEncodedContent(requestBody)); var response = await http.PostAsync(url, new FormUrlEncodedContent(requestBody));


var contents = JsonConvert.DeserializeObject<TokenResponse>(await response.Content.ReadAsStringAsync()); var contents = JsonConvert.DeserializeObject<TokenResponse>(await response.Content.ReadAsStringAsync());
return await Task.FromResult(new TokenResponse
return new TokenResponse
{ {
AccessToken = contents!.AccessToken,
RefreshToken = contents!.RefreshToken,
ExpiresIn = contents!.ExpiresIn
});
access_token = contents!.access_token,
refresh_token = contents!.refresh_token,
expires_in = contents!.expires_in
};
} }


public async Task<CodeRequest> GetAuthParams() public async Task<CodeRequest> GetAuthParams()

+ 1
- 0
NemAnCore/NemAnBlazor.csproj Ver fichero

</PropertyGroup> </PropertyGroup>


<ItemGroup> <ItemGroup>
<PackageReference Include="Blazored.SessionStorage" Version="2.2.0" />
<PackageReference Include="Grpc.Net.Client" Version="2.47.0" /> <PackageReference Include="Grpc.Net.Client" Version="2.47.0" />
<PackageReference Include="Grpc.Net.Client.Web" Version="2.47.0" /> <PackageReference Include="Grpc.Net.Client.Web" Version="2.47.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.7" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.7" />

+ 4
- 3
NemAnCore/Pages/Callback.razor Ver fichero

@using NemAnBlazor.Services.Interfaces @using NemAnBlazor.Services.Interfaces
@inject NavigationManager NavigationMgr @inject NavigationManager NavigationMgr
@inject IAuthClientService AuthService @inject IAuthClientService AuthService
@inject Blazored.SessionStorage.ISessionStorageService sessionStorage
<PageTitle>Callback page</PageTitle> <PageTitle>Callback page</PageTitle>




//code is the only parameter in the url //code is the only parameter in the url
string code = url.Split("=")[1]; string code = url.Split("=")[1];


string redirectURI = "https://localhost:44342/"; //ovo promeni da se storuje negde na neko univerzalno mesto
var response = await AuthService.GetAccessToken(new GrpcShared.DTO.Auth.TokenRequest { code = code, redirect_uri = redirectURI});
var response = await AuthService.GetAccessToken(new GrpcShared.DTO.Auth.TokenRequest { code = code});


//store access token in local storage //store access token in local storage

await sessionStorage.SetItemAsync("token", response.access_token);
await sessionStorage.SetItemAsync("refresh_token", response.refresh_token);
} }
} }

+ 2
- 0
NemAnCore/Program.cs Ver fichero

using Blazored.SessionStorage;
using Grpc.Net.Client; using Grpc.Net.Client;
using Grpc.Net.Client.Web; using Grpc.Net.Client.Web;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;


builder.Services.AddScoped<ISearchClientService, SearchClientService>(); builder.Services.AddScoped<ISearchClientService, SearchClientService>();
builder.Services.AddScoped<IAuthClientService, AuthClientService>(); builder.Services.AddScoped<IAuthClientService, AuthClientService>();
builder.Services.AddBlazoredSessionStorage();


await builder.Build().RunAsync(); await builder.Build().RunAsync();



Cargando…
Cancelar
Guardar