lex-identity-entra 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/legion/extensions/identity/entra/application/actors/token_refresher.rb +2 -1
- data/lib/legion/extensions/identity/entra/helpers/token_manager.rb +13 -8
- data/lib/legion/extensions/identity/entra/managed_identity/actors/token_refresher.rb +2 -1
- data/lib/legion/extensions/identity/entra/version.rb +1 -1
- data/lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb +3 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e6731d955e0a738ca12ad20875132f4b3e008e56313e20a8be750ecd5fc96942
|
|
4
|
+
data.tar.gz: 785a786e42520016f0e3220e646aefed11da78375b2e8870f872a7a0c71bfd07
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bf3abe1ea0891638459bc7b5ed151d61a5346af07f2599bcede3af0a3f606f04853fd8b0320e3eb5584045243c1b047d3c84f43dbe218d7e95cf31d2a392892f
|
|
7
|
+
data.tar.gz: 66e861f841b907ca63e1dc452458930afdba359c0a99b042b11e523164d3c919159fca0117c8469094903932ba83ae5dcd0e5a329c43df72488c92054a4100a4
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.4.0] - 2026-05-18
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- Token refresher actors (workload_identity, application, managed_identity) no longer activate when credentials are absent; eliminates noisy WARN/INFO spam on local dev.
|
|
9
|
+
- Vault read/write operations now require a resolved canonical name before constructing vault paths; prevents 403 errors from writing to `users/anonymous/...` or `users/default/...` before identity resolves.
|
|
10
|
+
- Removed `'default'` fallback from `vault_path`; returns nil when canonical name is unavailable.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- `canonical_name_available?` helper added to TokenManager; guards all vault operations and backfill logic.
|
|
14
|
+
- Tokens save to local disk first, backfill to vault once identity resolves to real canonical name.
|
|
15
|
+
|
|
5
16
|
## [0.3.1] - 2026-05-15
|
|
6
17
|
|
|
7
18
|
### Fixed
|
|
@@ -22,7 +22,8 @@ module Legion
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def enabled? # rubocop:disable Legion/Extension/ActorEnabledSideEffects
|
|
25
|
-
|
|
25
|
+
auth = Legion::Extensions::Identity::Entra::Helpers::TokenManager.settings_auth
|
|
26
|
+
auth[:tenant_id] && auth[:client_id] && auth[:client_secret]
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def manual
|
|
@@ -36,7 +36,7 @@ module Legion
|
|
|
36
36
|
log.debug("TokenManager.token_data: qualifier=#{qualifier} refresh=#{refresh}")
|
|
37
37
|
vault_data = from_vault_data(qualifier)
|
|
38
38
|
other_data = vault_data || from_local_data(qualifier) || from_memory(qualifier)
|
|
39
|
-
if other_data && !vault_data && vault_available? &&
|
|
39
|
+
if other_data && !vault_data && vault_available? && canonical_name_available?
|
|
40
40
|
log.info("TokenManager.token_data: backfilling #{qualifier} token to vault")
|
|
41
41
|
backfill_saved = save_to_vault(qualifier, access_token: other_data[:access_token],
|
|
42
42
|
refresh_token: other_data[:refresh_token],
|
|
@@ -85,7 +85,7 @@ module Legion
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def from_vault_data(qualifier)
|
|
88
|
-
return nil unless vault_available? &&
|
|
88
|
+
return nil unless vault_available? && canonical_name_available?
|
|
89
89
|
|
|
90
90
|
path = vault_path(qualifier)
|
|
91
91
|
log.debug("TokenManager.from_vault_data: reading kv/#{path}")
|
|
@@ -112,6 +112,7 @@ module Legion
|
|
|
112
112
|
def save_to_vault(qualifier, access_token:, refresh_token:, expires_at:,
|
|
113
113
|
scopes: nil, tenant_id: nil, client_id: nil, scope_fingerprint: nil)
|
|
114
114
|
return unless vault_available?
|
|
115
|
+
return unless canonical_name_available?
|
|
115
116
|
|
|
116
117
|
path = vault_path(qualifier)
|
|
117
118
|
cluster = Legion::Crypt.respond_to?(:default_cluster_name) ? Legion::Crypt.default_cluster_name : 'vault'
|
|
@@ -279,13 +280,9 @@ module Legion
|
|
|
279
280
|
auth = settings_auth
|
|
280
281
|
pattern_settings = auth[qualifier.to_sym]
|
|
281
282
|
return pattern_settings[:vault_path] if pattern_settings.is_a?(Hash) && pattern_settings[:vault_path]
|
|
283
|
+
return nil unless canonical_name_available?
|
|
282
284
|
|
|
283
|
-
|
|
284
|
-
Legion::Identity::Process.canonical_name
|
|
285
|
-
else
|
|
286
|
-
'default'
|
|
287
|
-
end
|
|
288
|
-
"users/#{identity}/entra/#{qualifier}/auth"
|
|
285
|
+
"users/#{Legion::Identity::Process.canonical_name}/entra/#{qualifier}/auth"
|
|
289
286
|
end
|
|
290
287
|
|
|
291
288
|
def local_path(qualifier)
|
|
@@ -354,6 +351,14 @@ module Legion
|
|
|
354
351
|
|
|
355
352
|
%i[configured verified authenticated].include?(Legion::Identity::Process.trust)
|
|
356
353
|
end
|
|
354
|
+
|
|
355
|
+
def canonical_name_available?
|
|
356
|
+
return false unless defined?(Legion::Identity::Process)
|
|
357
|
+
return false unless Legion::Identity::Process.respond_to?(:canonical_name)
|
|
358
|
+
|
|
359
|
+
name = Legion::Identity::Process.canonical_name
|
|
360
|
+
!name.nil? && !name.empty? && name != 'anonymous'
|
|
361
|
+
end
|
|
357
362
|
end
|
|
358
363
|
end
|
|
359
364
|
end
|
|
@@ -22,7 +22,8 @@ module Legion
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def enabled? # rubocop:disable Legion/Extension/ActorEnabledSideEffects
|
|
25
|
-
|
|
25
|
+
ENV.fetch('IDENTITY_ENDPOINT', nil) || ENV.fetch('AZURE_IMDS_ENABLED', nil) ||
|
|
26
|
+
Legion::Settings.dig(:identity, :entra, :managed_identity, :enabled)
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
def manual
|
|
@@ -22,7 +22,9 @@ module Legion
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def enabled? # rubocop:disable Legion/Extension/ActorEnabledSideEffects
|
|
25
|
-
|
|
25
|
+
ENV.fetch('AZURE_TENANT_ID', nil) &&
|
|
26
|
+
ENV.fetch('AZURE_CLIENT_ID', nil) &&
|
|
27
|
+
ENV.fetch('AZURE_FEDERATED_TOKEN_FILE', nil)
|
|
26
28
|
end
|
|
27
29
|
|
|
28
30
|
def manual
|