15 Commits

Author SHA1 Message Date
07cd891ade feat: dockerized version 2025-09-02 14:00:41 -06:00
8cfbad61fb retrieve redirec uri gogle from app settings 2025-08-29 12:51:41 -06:00
9b7e55c439 Retrieve redirect uri from app settings 2025-08-29 12:50:26 -06:00
806b5242b0 Merge pull request 'Add the code to retrieve the idToken instead of accessToken in google authentication' (#7) from feature/use-id-token into development
Reviewed-on: #7
Reviewed-by: efrain_marin <efrain.marin@agilewebs.com>
Reviewed-by: Sergio Matías <sergio.matias@agilewebs.com>
2025-08-28 17:39:55 +00:00
Oscar Morales
24f5711e1c Add the code to retrieve the idToken instead of accessToken in google authentication 2025-08-27 23:23:04 -06:00
e3d75fbfa8 Fix duplicated property 2025-08-26 14:18:33 -06:00
9872c1b88b Merge pull request 'Add tenant property to user' (#6) from feature/add-tenant-to-user into development
Reviewed-on: #6
Reviewed-by: OscarMmtz <oscar.morales@agilewebs.com>
2025-08-26 20:18:04 +00:00
fe4c0696e8 Merge branch 'development' into feature/add-tenant-to-user 2025-08-26 14:16:33 -06:00
3b752f182f fix 2025-08-26 14:11:09 -06:00
4a2ed52a2f fix 2025-08-26 14:10:48 -06:00
5277896bdc Add tenant identifier in user property 2025-08-26 14:10:29 -06:00
9a02f0e4d6 Fixed google settings 2025-08-22 21:04:25 -06:00
4cd89c6a83 Fix id property in user claims 2025-08-08 23:51:23 -06:00
0bd46f2594 Remove GUID property from user 2025-08-08 23:49:44 -06:00
7bbb8ebfe5 Add tenant property to user 2025-08-08 23:05:27 -06:00
13 changed files with 55 additions and 23 deletions

View File

@@ -11,6 +11,7 @@ namespace Core.Thalos.BuildingBlocks
public UserAdapter? User { get; set; }
public RoleAdapter? Role { get; set; }
public TenantAdapter? Tenant { get; set; }
public IEnumerable<PermissionAdapter>? Permissions { get; set; }
public IEnumerable<ModuleAdapter> Modules { get; set; } = null!;

View File

@@ -16,14 +16,6 @@ namespace Core.Thalos.BuildingBlocks
[CollectionAttributeName("Users")]
public class UserAdapter : Document
{
/// <summary>
/// Gets or sets the guid of the user.
/// </summary>
[BsonElement("guid")]
[BsonRepresentation(BsonType.String)]
[JsonPropertyName("guid")]
public string? Guid { get; set; }
/// <summary>
/// Gets or sets the email address of the user.
/// </summary>
@@ -64,6 +56,14 @@ namespace Core.Thalos.BuildingBlocks
[JsonPropertyName("displayName")]
public string? DisplayName { get; set; }
/// <summary>
/// Gets or sets the Tenand ID of the user.
/// </summary>
[BsonElement("tenantId")]
[BsonRepresentation(BsonType.ObjectId)]
[JsonPropertyName("tenantId")]
public string TenantId { get; set; } = null!;
/// <summary>
/// Gets or sets the role ID of the user.
/// </summary>

View File

@@ -5,9 +5,9 @@ using Microsoft.Extensions.Configuration;
namespace Core.Thalos.BuildingBlocks
{
public class GoogleAuthorization(
IGoogleAuthHelper googleHelper, IConfiguration config) : IGoogleAuthorization
IGoogleAuthHelper googleHelper, IConfiguration config, GoogleAuthSettings googlesettings) : IGoogleAuthorization
{
private string RedirectUrl = config["Authentication:Google:RedirectUri"]!;
private string RedirectUrl = googlesettings.RedirectUri ?? string.Empty;
public async Task<UserCredential> ExchangeCodeForToken(string code)
{

View File

@@ -23,10 +23,20 @@ namespace Core.Thalos.BuildingBlocks
/// <summary>
/// Claim name for user's ID.
/// </summary>
public const string Id = "id";
public const string Id = "_id";
/// <summary>
/// Claim name for user's role ID.
/// Claim name for user's tenant name.
/// </summary>
public const string Tenant = "tenant";
/// <summary>
/// Claim name for user's tenant identifier.
/// </summary>
public const string TenantId = "tenantId";
/// <summary>
/// Claim name for user's role name.
/// </summary>
public const string Role = "role";

View File

@@ -58,5 +58,6 @@ namespace Core.Thalos.BuildingBlocks
public const string GoogleClientId = "GoogleClientId";
public const string GoogleClientSecret = "GoogleClientSecret";
public const string GoogleRedirectUri = "GoogleRedirectUri";
public const string GoogleLocalRedirectUri = "GoogleLocalRedirectUri";
}
}

View File

@@ -14,7 +14,7 @@
<ItemGroup>
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
<PackageReference Include="Core.Blueprint.KeyVault" Version="1.0.3" />
<PackageReference Include="Core.Blueprint.KeyVault" Version="1.0.0" />
<PackageReference Include="Core.Blueprint.Mongo" Version="1.0.0" />
<PackageReference Include="Google.Apis.Auth" Version="1.70.0" />
<PackageReference Include="Google.Apis.Oauth2.v2" Version="1.68.0.1869" />

View File

@@ -9,7 +9,6 @@ using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.Identity.Web;
using Microsoft.IdentityModel.Tokens;
using System.Security.Cryptography;
@@ -87,8 +86,6 @@ namespace Core.Thalos.BuildingBlocks.Configuration
options.Audience = jwtIssuerOptions?.Audience;
options.SigningCredentials = new SigningCredentials(rsaPrivateKey, SecurityAlgorithms.RsaSha256);
});
services.AddSingleton<IOptions<JwtIssuerOptions>>(Microsoft.Extensions.Options.Options.Create(jwtIssuerOptions));
}
public static void AddAzureAuthentication(AuthSettings authSettings, IConfiguration configuration, IServiceCollection services)
@@ -116,6 +113,8 @@ namespace Core.Thalos.BuildingBlocks.Configuration
public static void AddGoogleAuthentication(IServiceCollection services, GoogleAuthSettings googleAuthSettings)
{
services.AddSingleton<GoogleAuthSettings>(googleAuthSettings);
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = Schemes.GoogleScheme;

View File

@@ -10,6 +10,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Swashbuckle.AspNetCore.SwaggerUI;
@@ -114,6 +115,12 @@ namespace Core.Thalos.BuildingBlocks.Configuration
c.AddSecurityDefinition(googleScheme, new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Extensions = new Dictionary<string, IOpenApiExtension>
{
["x-tokenName"] = new OpenApiString("id_token")
},
Flows = new OpenApiOAuthFlows
{
AuthorizationCode = new OpenApiOAuthFlow

View File

@@ -11,7 +11,10 @@ namespace Core.Thalos.BuildingBlocks
public class GoogleAccessTokenAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
IConfiguration config) : AuthenticationHandler<AuthenticationSchemeOptions>(options, logger, encoder)
IConfiguration config,
GoogleAuthSettings googleSettings
) : AuthenticationHandler<AuthenticationSchemeOptions>(options, logger, encoder)
{
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
@@ -31,7 +34,7 @@ namespace Core.Thalos.BuildingBlocks
idToken,
new GoogleJsonWebSignature.ValidationSettings
{
Audience = new[] { config["Authentication:Google:ClientId"]! }
Audience = new[] { googleSettings.ClientId! }
});
}
catch (InvalidJwtException)

View File

@@ -112,7 +112,7 @@ namespace Core.Thalos.BuildingBlocks
{
googleSettings.ClientId = (await keyVaultProvider.GetSecretAsync(Secrets.GoogleClientId, new CancellationToken { })).Secret.Value; ;
googleSettings.ClientSecret = (await keyVaultProvider.GetSecretAsync(Secrets.GoogleClientSecret, new CancellationToken { })).Secret.Value;
googleSettings.RedirectUri = (await keyVaultProvider.GetSecretAsync(Secrets.GoogleRedirectUri, new CancellationToken { })).Secret.Value;
googleSettings.RedirectUri = builder.Configuration.GetSection(Secrets.GoogleLocalRedirectUri).Value;
}
else
{

View File

@@ -4,12 +4,12 @@ using Microsoft.Extensions.Configuration;
namespace Core.Thalos.BuildingBlocks
{
public class GoogleAuthHelper(IConfiguration config) : IGoogleAuthHelper
public class GoogleAuthHelper(IConfiguration config, GoogleAuthSettings googleSettings) : IGoogleAuthHelper
{
public ClientSecrets GetClientSecrets()
{
string clientId = config["Authentication:Google:ClientId"]!;
string clientSecret = config["Authentication:Google:ClientSecret"]!;
string clientId = googleSettings.ClientId ?? string.Empty;
string clientSecret = googleSettings.ClientSecret ?? string.Empty;
return new() { ClientId = clientId, ClientSecret = clientSecret };
}

View File

@@ -87,8 +87,10 @@ namespace Core.Thalos.BuildingBlocks
{
new Claim(Claims.Name, adapter?.User?.DisplayName ?? string.Empty),
new Claim(Claims.GUID, adapter?.User?.Guid ?? string.Empty),
new Claim(Claims.Id, adapter?.User?.Id ?? string.Empty),
new Claim(Claims.Email, adapter?.User?.Email ?? string.Empty),
new Claim(Claims.Tenant, adapter?.Tenant?.Name ?? string.Empty),
new Claim(Claims.Tenant, adapter?.Tenant?.Id ?? string.Empty),
new Claim(Claims.Role, adapter?.Role?.Name ?? string.Empty),
new Claim(Claims.RoleId, adapter?.Role?.Id ?? string.Empty),
new Claim(Claims.Applications, JsonSerializer.Serialize(adapter?.Role?.Applications), JsonClaimValueTypes.JsonArray),

9
nuget.config Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<!-- Tu BaGet primero -->
<add key="BaGet" value="https://nuget.dream-views.com/v3/index.json" protocolVersion="3" />
<!-- NuGet oficial como fallback (si quieres) -->
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>