Skip to content

Commit 81b7d36

Browse files
committed
Resolve refresh token expiration bug.
Remove login and logout blinking with EmptyLayout.razor in sample.
1 parent 0b22c84 commit 81b7d36

File tree

6 files changed

+34
-20
lines changed

6 files changed

+34
-20
lines changed

samples/BlazorWAOidcSample.Client/BlazorWAOidcSample.Client.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="5.0.1" />
1111
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.1" />
1212
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.01" PrivateAssets="all" />
13-
<PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
14-
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
13+
<PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
1514
</ItemGroup>
1615

1716
<ItemGroup>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
@page "/authentication/{action}"
2+
@layout EmptyLayout
23
@inherits AuthenticationPageBase
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@inherits LayoutComponentBase
2+
3+
@Body

src/ITfoxtec.Identity.BlazorWA.Oidc/ITfoxtec.Identity.BlazorWA.Oidc.csproj

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net5.0;netstandard2.0</TargetFrameworks>
4+
<TargetFrameworks>net5.0;netstandard2.1</TargetFrameworks>
55
<AssemblyName>ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect</AssemblyName>
66
<RootNamespace>ITfoxtec.Identity.BlazorWebAssembly.OpenidConnect</RootNamespace>
77

@@ -21,9 +21,9 @@ The component automatically handle token / session update with use of the refres
2121
<PackageTags>Blazor WebAssembly OpenID Connect (OIDC) Proof Key for Code Exchange (PKCE) id token access token refresh token</PackageTags>
2222
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
2323
<Copyright>© 2020 ITfoxtec</Copyright>
24-
<AssemblyVersion>1.4.7.0</AssemblyVersion>
25-
<FileVersion>1.4.7.0</FileVersion>
26-
<Version>1.4.7</Version>
24+
<AssemblyVersion>1.4.12.0</AssemblyVersion>
25+
<FileVersion>1.4.12.0</FileVersion>
26+
<Version>1.4.12</Version>
2727
</PropertyGroup>
2828

2929
<ItemGroup>
@@ -49,20 +49,21 @@ The component automatically handle token / session update with use of the refres
4949
<NoWarn>$(NoWarn);1591;1573</NoWarn>
5050
</PropertyGroup>
5151

52-
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'">
52+
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.1'">
5353
<PackageReference Include="Microsoft.AspNetCore.Components" Version="3.1.10" />
5454
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="3.1.10" />
55+
<PackageReference Include="Microsoft.Extensions.Http" Version="3.1.12" />
5556
</ItemGroup>
56-
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'">
57+
<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.1'">
5758
<DefineConstants>NETSTANDARD2;NETSTANDARD</DefineConstants>
5859
</PropertyGroup>
59-
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|netstandard2.0|AnyCPU'">
60+
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|netstandard2.1|AnyCPU'">
6061
<DebugType>pdbonly</DebugType>
6162
<DebugSymbols>true</DebugSymbols>
6263
<GenerateDocumentationFile>true</GenerateDocumentationFile>
6364
<NoWarn>$(NoWarn);1591;1573</NoWarn>
6465
</PropertyGroup>
65-
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard2.0|AnyCPU'">
66+
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard2.1|AnyCPU'">
6667
<GenerateDocumentationFile>true</GenerateDocumentationFile>
6768
<NoWarn>$(NoWarn);1591;1573</NoWarn>
6869
</PropertyGroup>

src/ITfoxtec.Identity.BlazorWA.Oidc/OidcAuthenticationStateProvider.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Microsoft.AspNetCore.Components.Authorization;
55
using Microsoft.Extensions.DependencyInjection;
66
using System;
7-
using System.Collections.Generic;
87
using System.Linq;
98
using System.Security.Claims;
109
using System.Threading.Tasks;

src/ITfoxtec.Identity.BlazorWA.Oidc/OpenidConnectPkce.cs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,7 @@ public async Task LoginCallBackAsync(string responseUrl)
152152
var request = new HttpRequestMessage(HttpMethod.Post, oidcDiscovery.TokenEndpoint);
153153
request.Content = new FormUrlEncodedContent(requestDictionary);
154154

155-
var httpClient = serviceProvider.GetService<HttpClient>();
156-
var response = await httpClient.SendAsync(request);
155+
var response = await GetHttpClient().SendAsync(request);
157156
switch (response.StatusCode)
158157
{
159158
case HttpStatusCode.OK:
@@ -223,8 +222,7 @@ public async Task<OidcUserSession> HandleRefreshTokenAsync(OidcUserSession userS
223222
var request = new HttpRequestMessage(HttpMethod.Post, oidcDiscovery.TokenEndpoint);
224223
request.Content = new FormUrlEncodedContent(tokenRequest.ToDictionary());
225224

226-
var httpClient = serviceProvider.GetService<HttpClient>();
227-
var response = await httpClient.SendAsync(request);
225+
var response = await GetHttpClient().SendAsync(request);
228226
switch (response.StatusCode)
229227
{
230228
case HttpStatusCode.OK:
@@ -267,16 +265,29 @@ public async Task<OidcUserSession> HandleRefreshTokenAsync(OidcUserSession userS
267265
}
268266

269267
case HttpStatusCode.BadRequest:
270-
var resultBadRequest = await response.Content.ReadAsStringAsync();
271-
var tokenResponseBadRequest = resultBadRequest.ToObject<TokenResponse>();
272-
tokenResponseBadRequest.Validate(true);
273-
throw new Exception($"Error, Bad request. StatusCode={response.StatusCode}");
268+
try
269+
{
270+
var resultBadRequest = await response.Content.ReadAsStringAsync();
271+
var tokenResponseBadRequest = resultBadRequest.ToObject<TokenResponse>();
272+
tokenResponseBadRequest.Validate(true);
273+
throw new TokenUnavailableException($"Error, Bad request. StatusCode={response.StatusCode}");
274+
}
275+
catch (ResponseErrorException rex)
276+
{
277+
throw new TokenUnavailableException(rex.Message, rex);
278+
}
274279

275280
default:
276-
throw new Exception($"Error, Status Code not expected. StatusCode={response.StatusCode}");
281+
throw new TokenUnavailableException($"Error, Status Code not expected. StatusCode={response.StatusCode}");
277282
}
278283
}
279284

285+
private HttpClient GetHttpClient()
286+
{
287+
var httpClientFactory = serviceProvider.GetService<IHttpClientFactory>();
288+
return httpClientFactory.CreateClient();
289+
}
290+
280291
public async Task LogoutAsync(OpenidConnectPkceSettings openidClientPkceSettings = null)
281292
{
282293
try

0 commit comments

Comments
 (0)