Skip to content

Commit b9f14a9

Browse files
Can edit the expiration time of a refresh token
1 parent f091619 commit b9f14a9

7 files changed

Lines changed: 57 additions & 1 deletion

File tree

src/IdServer/SimpleIdServer.IdServer.Website/Pages/Client/ClientAdvanced.razor

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,16 @@
128128
<RadzenNumeric Name="TokenExpirationTimeInSeconds" Class="w-100" @bind-Value=@updateAdvancedClient.TokenExpirationTimeInSeconds></RadzenNumeric>
129129
</div>
130130
</div>
131+
<!-- Refresh token expiration time -->
132+
<div class="row mt-1">
133+
<div class="col-md-2">
134+
<RadzenIcon Icon="info" MouseEnter="@(args => ShowTooltip(args, Global.RefreshTokenExpirationTimeTooltip))" />
135+
<RadzenLabel Text="@Global.RefreshTokenExpirationTime" Style="padding: 0px;" />
136+
</div>
137+
<div class="col">
138+
<RadzenNumeric Name="RefreshTokenExpirationTimeInSeconds" Class="w-100" @bind-Value=@updateAdvancedClient.RefreshTokenExpirationTimeInSeconds></RadzenNumeric>
139+
</div>
140+
</div>
131141
<!-- Cookie expiration time -->
132142
<div class="row mt-1">
133143
<div class="col-md-2">
@@ -221,6 +231,7 @@
221231
public string? TokenSignedResponseAlg { get; set; } = null;
222232
public string? IdTokenSignedResponseAlg { get; set; } = null;
223233
public string? AuthorizationSignedResponseAlg { get; set; } = null;
234+
public double RefreshTokenExpirationTimeInSeconds { get; set; } = 60 * 30;
224235
public string? AuthorizationDataTypes { get; set; } = null;
225236
public bool IsDPoPRequired { get; set; } = false;
226237
public bool IsDPoPNonceRequired { get; set; } = false;
@@ -281,6 +292,11 @@
281292
updateAdvancedClient.TokenExpirationTimeInSeconds = Client.TokenExpirationTimeInSeconds.Value;
282293
}
283294

295+
if(Client.RefreshTokenExpirationTimeInSeconds != null)
296+
{
297+
updateAdvancedClient.RefreshTokenExpirationTimeInSeconds = Client.RefreshTokenExpirationTimeInSeconds.Value;
298+
}
299+
284300
if (Client.UserCookieExpirationTimeInSeconds != null)
285301
{
286302
updateAdvancedClient.UserCookieExpirationTimeInSeconds = Client.UserCookieExpirationTimeInSeconds.Value;
@@ -311,6 +327,7 @@
311327
IsDPoPNonceRequired = client.IsDPoPNonceRequired,
312328
IsDPoPRequired = client.IsDPoPRequired,
313329
TokenExpirationTimeInSeconds = client.TokenExpirationTimeInSeconds,
330+
RefreshTokenExpirationTimeInSeconds = client.RefreshTokenExpirationTimeInSeconds,
314331
UserCookieExpirationTimeInSeconds = client.UserCookieExpirationTimeInSeconds,
315332
AuthorizationCodeExpirationInSeconds = client.AuthorizationCodeExpirationInSeconds,
316333
DeviceCodeExpirationInSeconds = client.DeviceCodeExpirationInSeconds,

src/IdServer/SimpleIdServer.IdServer.Website/Resources/Global.Designer.cs

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/IdServer/SimpleIdServer.IdServer.Website/Resources/Global.resx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2205,4 +2205,10 @@ The &lt;b&gt;authorization_signed_response_alg&lt;/b&gt; will be set to &lt;b&gt
22052205
<data name="PasswordIsTemporary" xml:space="preserve">
22062206
<value>The password is temporary</value>
22072207
</data>
2208+
<data name="RefreshTokenExpirationTime" xml:space="preserve">
2209+
<value>Refresh token expiration time</value>
2210+
</data>
2211+
<data name="RefreshTokenExpirationTimeTooltip" xml:space="preserve">
2212+
<value>Set the refresh token duration in seconds; by default, the value is 30 minutes</value>
2213+
</data>
22082214
</root>

src/IdServer/SimpleIdServer.IdServer.Website/Stores/ClientStore/ClientEffects.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Fluxor;
44
using Microsoft.Extensions.Options;
55
using Microsoft.IdentityModel.Tokens;
6+
using Org.BouncyCastle.Bcpg.OpenPgp;
67
using SimpleIdServer.DPoP;
78
using SimpleIdServer.IdServer.Api.Clients;
89
using SimpleIdServer.IdServer.Api.Token.Handlers;
@@ -693,6 +694,7 @@ public async Task Handle(UpdateAdvancedClientSettingsAction act, IDispatcher dis
693694
DPOPNonceLifetimeInSeconds = act.DPOPNonceLifetimeInSeconds,
694695
IsDPOPNonceRequired = act.IsDPoPNonceRequired,
695696
TokenExpirationTimeInSeconds = act.TokenExpirationTimeInSeconds,
697+
RefreshTokenExpirationTimeInSeconds = act.RefreshTokenExpirationTimeInSeconds,
696698
UserCookieExpirationTimeInSeconds = act.UserCookieExpirationTimeInSeconds,
697699
AuthorizationCodeExpirationInSeconds = act.AuthorizationCodeExpirationInSeconds,
698700
DeviceCodeExpirationInSeconds = act.DeviceCodeExpirationInSeconds,
@@ -731,7 +733,8 @@ public async Task Handle(UpdateAdvancedClientSettingsAction act, IDispatcher dis
731733
PARExpirationTimeInSeconds = act.PARExpirationTimeInSeconds,
732734
DpopLifetimeSeconds = act.DpopLifetimeSeconds,
733735
MaxBindingMessageSize = act.MaxBindingMessageSize,
734-
MaxRequestParameterLifetimeSeconds = act.MaxRequestParameterLifetimeSeconds
736+
MaxRequestParameterLifetimeSeconds = act.MaxRequestParameterLifetimeSeconds,
737+
RefreshTokenExpirationTimeInSeconds = act.RefreshTokenExpirationTimeInSeconds
735738
});
736739
}
737740
catch
@@ -1336,6 +1339,10 @@ public class UpdateAdvancedClientSettingsAction
13361339
public bool IsDPoPNonceRequired { get; set; } = false;
13371340
public double DPOPNonceLifetimeInSeconds { get; set; }
13381341
public double TokenExpirationTimeInSeconds { get; set; }
1342+
public double RefreshTokenExpirationTimeInSeconds
1343+
{
1344+
get; set;
1345+
}
13391346
public double UserCookieExpirationTimeInSeconds { get; set; }
13401347
public int AuthorizationCodeExpirationInSeconds { get; set; }
13411348
public int DeviceCodeExpirationInSeconds { get; set; }
@@ -1365,6 +1372,7 @@ public class UpdateAdvancedClientSettingsSuccessAction
13651372
public int MaxRequestParameterLifetimeSeconds { get; set; }
13661373
public int MaxBindingMessageSize { get; set; }
13671374
public int DpopLifetimeSeconds { get; set; }
1375+
public double RefreshTokenExpirationTimeInSeconds { get; set; }
13681376
}
13691377

13701378
public class UpdateAdvancedClientSettingsFailureAction

src/IdServer/SimpleIdServer.IdServer.Website/Stores/ClientStore/ClientReducers.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ public static ClientState ReduceUpdateAdvancedClientSettingsSuccessAction(Client
397397
client.MaxRequestParameterLifetimeSeconds = act.MaxRequestParameterLifetimeSeconds;
398398
client.MaxBindingMessageSize = act.MaxBindingMessageSize;
399399
client.DpopLifetimeSeconds = act.DpopLifetimeSeconds;
400+
client.RefreshTokenExpirationTimeInSeconds = act.RefreshTokenExpirationTimeInSeconds;
400401
return state with
401402
{
402403
Client = client

src/IdServer/SimpleIdServer.IdServer/Api/Clients/ClientsController.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ void Update(Client existingClient, UpdateAdvancedClientSettingsRequest request)
313313
existingClient.DPOPNonceLifetimeInSeconds = request.DPOPNonceLifetimeInSeconds;
314314
existingClient.IsDPOPNonceRequired = request.IsDPOPNonceRequired;
315315
existingClient.TokenExpirationTimeInSeconds = request.TokenExpirationTimeInSeconds;
316+
existingClient.RefreshTokenExpirationTimeInSeconds = request.RefreshTokenExpirationTimeInSeconds;
316317
existingClient.UserCookieExpirationTimeInSeconds = request.UserCookieExpirationTimeInSeconds;
317318
existingClient.AuthorizationCodeExpirationInSeconds = request.AuthorizationCodeExpirationInSeconds;
318319
existingClient.DeviceCodeExpirationInSeconds = request.DeviceCodeExpirationInSeconds;

src/IdServer/SimpleIdServer.IdServer/Api/Clients/UpdateAdvancedClientSettingsRequest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,9 @@ public int DpopLifetimeSeconds
5252
{
5353
get; set;
5454
}
55+
[JsonPropertyName(OAuthClientParameters.RefreshTokenExpirationTimeInSeconds)]
56+
public double RefreshTokenExpirationTimeInSeconds
57+
{
58+
get; set;
59+
}
5560
}

0 commit comments

Comments
 (0)