Skip to content

Commit 9fd3425

Browse files
committed
fix: Issuer default value from HttpContext
updated docs
1 parent a97ed18 commit 9fd3425

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ Set your `appsettings.json` file with this values:
8080

8181
```json
8282
"AppJwtSettings": {
83-
"Issuer": "https://my-application.com",
8483
"Audience": "MyApplication.Name"
8584
}
8685
```
@@ -89,9 +88,10 @@ It's possible to configure some aspects of token
8988
|Key|Meaning|Default
9089
|--|--|---|
9190
|Expiration| Expiration time (in hours) | 1 |
92-
|Issuer| The name of the JWT issuer | NetDevPack.Identity |
93-
|Audience| The domain that the JWT will be valid | Api |
91+
|Issuer| The party that "created" the token and signed it with its private key. Usually the application Url | Get current root Url from `HttpContext` |
92+
|Audience| API's that should accept the token. E.g your application Main name. | NetDevPack |
9493
|RefreshTokenExpiration | Refresh token expiration (In Days) | 30 |
94+
|RefreshTokenType | `OneTime` or `ReUse` | 30 |
9595
|SecretKey `Deprecated` | Is your key to build JWT. **Read notes**| Do not use it |
9696

9797
>**Note:** Now we are using [NetDevPack.Security.Jwt](https://github.com/NetDevPack/Security.Jwt) to generate and Store your keys. It generate a RSA 2048 by default. You can check the project for more info.

src/NetDevPack.Identity/Jwt/JwtBuilderInject.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Security.Claims;
66
using System.Text;
77
using System.Threading.Tasks;
8+
using Microsoft.AspNetCore.Http;
89
using Microsoft.AspNetCore.Identity;
910
using Microsoft.Extensions.Options;
1011
using Microsoft.IdentityModel.JsonWebTokens;
@@ -25,6 +26,7 @@ internal class JwtBuilderInject<TIdentityUser, TKey> : IJwtBuilder
2526
private readonly UserManager<TIdentityUser> _userManager;
2627
private readonly IOptions<AppJwtSettings> _settings;
2728
private readonly IJwtService _jwtService;
29+
private readonly IHttpContextAccessor _httpContext;
2830

2931
private ICollection<Claim> _userClaims;
3032
private ICollection<Claim> _jwtClaims;
@@ -43,11 +45,16 @@ internal class JwtBuilderInject<TIdentityUser, TKey> : IJwtBuilder
4345
private bool _useDefaultJwtClaims;
4446
private TIdentityUser _user;
4547

46-
public JwtBuilderInject(UserManager<TIdentityUser> userManager, IOptions<AppJwtSettings> settings, IJwtService jwtService)
48+
public JwtBuilderInject(
49+
UserManager<TIdentityUser> userManager,
50+
IOptions<AppJwtSettings> settings,
51+
IJwtService jwtService,
52+
IHttpContextAccessor httpContext)
4753
{
4854
_userManager = userManager;
4955
_settings = settings;
5056
_jwtService = jwtService;
57+
_httpContext = httpContext;
5158
_userClaims = new List<Claim>();
5259
_jwtClaims = new List<Claim>();
5360
_identityClaims = new ClaimsIdentity();
@@ -128,9 +135,13 @@ public async Task<string> BuildRefreshToken()
128135

129136
var handler = new JwtSecurityTokenHandler();
130137

138+
var issuer = _settings.Value.Issuer;
139+
if (string.IsNullOrEmpty(issuer))
140+
issuer = $"{_httpContext.HttpContext.Request.Scheme}://{_httpContext.HttpContext.Request.Host}";
141+
131142
var securityToken = handler.CreateToken(new SecurityTokenDescriptor
132143
{
133-
Issuer = _settings.Value.Issuer,
144+
Issuer = issuer,
134145
Audience = _settings.Value.Audience,
135146
SigningCredentials = key,
136147
Subject = identityClaims,
@@ -185,10 +196,13 @@ public async Task<string> BuildToken()
185196
_identityClaims.AddClaims(_userClaims);
186197
}
187198

199+
var issuer = _settings.Value.Issuer;
200+
if (string.IsNullOrEmpty(issuer))
201+
issuer = $"{_httpContext.HttpContext.Request.Scheme}://{_httpContext.HttpContext.Request.Host}";
188202

189203
var token = tokenHandler.CreateToken(new SecurityTokenDescriptor
190204
{
191-
Issuer = _settings.Value.Issuer,
205+
Issuer = issuer,
192206
Audience = _settings.Value.Audience,
193207
Subject = _identityClaims,
194208
Expires = DateTime.UtcNow.AddHours(_settings.Value.Expiration),

src/NetDevPack.Identity/JwtBuilderExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ public static class JwtBuilderExtensions
1717
public static IJwksBuilder UseNetDevPackIdentity<TIdentityUser, TKey>(this IServiceCollection services) where TIdentityUser : IdentityUser<TKey> where TKey : IEquatable<TKey>
1818
{
1919
services.TryAddScoped<IJwtBuilder, JwtBuilderInject<TIdentityUser, TKey>>();
20-
return services.AddJwksManager();
20+
return services.AddHttpContextAccessor().AddJwksManager();
2121
}
2222
public static IJwksBuilder UseNetDevPackIdentity<TIdentityUser>(this IServiceCollection services) where TIdentityUser : IdentityUser
2323
{
2424
services.TryAddScoped<IJwtBuilder, JwtBuilderInject<TIdentityUser, string>>();
25-
return services.AddJwksManager();
25+
return services.AddHttpContextAccessor().AddJwksManager();
2626
}
2727
public static IJwksBuilder UseNetDevPackIdentity(this IServiceCollection services)
2828
{
2929
services.TryAddScoped<IJwtBuilder, JwtBuilderInject<IdentityUser, string>>();
30-
return services.AddJwksManager();
30+
return services.AddHttpContextAccessor().AddJwksManager();
3131
}
3232

3333
public static IdentityBuilder AddIdentityConfiguration(this IServiceCollection services)

src/NetDevPack.Identity/NetDevPack.Identity.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
2424
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.24" />
25-
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.15" />
25+
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.24" />
2626
</ItemGroup>
2727

2828
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">

0 commit comments

Comments
 (0)