@@ -325,6 +343,9 @@ else
private string _allowsitelogin;
private string _secret;
+ private string _issuer;
+ private string _audience;
+ private string _lifetime;
private string _token;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
@@ -368,6 +389,9 @@ else
_allowsitelogin = SettingService.GetSetting(settings, "ExternalLogin:AllowSiteLogin", "true");
_secret = SettingService.GetSetting(settings, "JwtOptions:Secret", "");
+ _issuer = SettingService.GetSetting(settings, "JwtOptions:Issuer", PageState.Uri.Scheme + "://" + PageState.Alias.Name);
+ _audience = SettingService.GetSetting(settings, "JwtOptions:Audience", "");
+ _lifetime = SettingService.GetSetting(settings, "JwtOptions:Lifetime", "20");
}
private List Search(string search)
@@ -468,6 +492,9 @@ else
if (!string.IsNullOrEmpty(_secret) && _secret.Length < 16) _secret = (_secret + "????????????????").Substring(0, 16);
settings = SettingService.SetSetting(settings, "JwtOptions:Secret", _secret, true);
+ settings = SettingService.SetSetting(settings, "JwtOptions:Issuer", _issuer, true);
+ settings = SettingService.SetSetting(settings, "JwtOptions:Audience", _audience, true);
+ settings = SettingService.SetSetting(settings, "JwtOptions:Lifetime", _lifetime, true);
await SettingService.UpdateSiteSettingsAsync(settings, site.SiteId);
await SettingService.ClearSiteSettingsCacheAsync(site.SiteId);
diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs
index bf19e391..e9c23318 100644
--- a/Oqtane.Server/Controllers/UserController.cs
+++ b/Oqtane.Server/Controllers/UserController.cs
@@ -529,10 +529,12 @@ namespace Oqtane.Controllers
var user = _users.GetUser(User.Identity.Name);
if (user != null)
{
- var secret = HttpContext.GetSiteSettings().GetValue("JwtOptions:Secret", "");
+ var sitesettings = HttpContext.GetSiteSettings();
+ var secret = sitesettings.GetValue("JwtOptions:Secret", "");
if (!string.IsNullOrEmpty(secret))
{
- token = _jwtManager.GenerateToken(_tenantManager.GetAlias(), user, secret, "", "", 525600); // 1 year
+ var lifetime = 525600; // long-lived token set to 1 year
+ token = _jwtManager.GenerateToken(_tenantManager.GetAlias(), user, secret, sitesettings.GetValue("JwtOptions:Issuer", ""), sitesettings.GetValue("JwtOptions:Audience", ""), lifetime);
}
}
return token;
diff --git a/Oqtane.Server/Infrastructure/Middleware/JwtMiddleware.cs b/Oqtane.Server/Infrastructure/Middleware/JwtMiddleware.cs
index cfc93d76..0787c354 100644
--- a/Oqtane.Server/Infrastructure/Middleware/JwtMiddleware.cs
+++ b/Oqtane.Server/Infrastructure/Middleware/JwtMiddleware.cs
@@ -25,14 +25,15 @@ namespace Oqtane.Infrastructure
var alias = context.GetAlias();
if (alias != null)
{
- var secret = context.GetSiteSettings().GetValue("JwtOptions:Secret", "");
+ var sitesettings = context.GetSiteSettings();
+ var secret = sitesettings.GetValue("JwtOptions:Secret", "");
if (!string.IsNullOrEmpty(secret))
{
var logger = context.RequestServices.GetService(typeof(ILogManager)) as ILogManager;
var jwtManager = context.RequestServices.GetService(typeof(IJwtManager)) as IJwtManager;
var token = context.Request.Headers["Authorization"].First().Split(" ").Last();
- var user = jwtManager.ValidateToken(token, secret, "", "");
+ var user = jwtManager.ValidateToken(token, secret, sitesettings.GetValue("JwtOptions:Issuer", ""), sitesettings.GetValue("JwtOptions:Audience", ""));
if (user != null)
{
// populate principal (reload user roles to ensure most accurate permission assigments)