Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
e278f79
feat(logging): Log obfuscated token request body and raw error response
spbsoluble Apr 16, 2026
f466fe8
chore(security): Exclude sensitive local files from version control
spbsoluble Apr 16, 2026
0637a89
chore(deps): Bump TestConsole target framework and global SDK to .NET 10
spbsoluble Apr 16, 2026
cffba6b
refactor(config): Remove dead IValidatableObject implementation
spbsoluble Apr 16, 2026
03214d5
feat(logging): Add structured audit logging for SOX/SOC2 compliance
spbsoluble Apr 16, 2026
13b7d31
fix(test-console): Mask password value in test output
spbsoluble Apr 16, 2026
20f0d76
docs(changelog): Update v1.3.0 changelog with compliance logging impr…
spbsoluble Apr 16, 2026
71a33d8
fix(logging): Throw on missing secret field instead of returning empt…
spbsoluble Apr 16, 2026
1dfc1f5
fix(logging): Truncate token endpoint error body before logging
spbsoluble Apr 16, 2026
a5b39dd
fix(logging): Add authentication attempt log event for Windows auth path
spbsoluble Apr 16, 2026
0fc993d
feat(logging): Add authentication success log event with caller identity
spbsoluble Apr 16, 2026
2088748
feat(logging): Thread correlation ID through all PAM operation log ev…
spbsoluble Apr 16, 2026
2d0438a
fix(logging): Capture HTTP call duration in exception paths
spbsoluble Apr 16, 2026
10a2200
refactor: Remove duplicate SecretResponse class
spbsoluble Apr 16, 2026
c92802c
fix(manifest): Set Username and ClientId to non-secret DataType
spbsoluble Apr 16, 2026
753439a
fix(test-console): Require environment variables, remove hardcoded cr…
spbsoluble Apr 16, 2026
6832344
docs(logging): Document Environment.UserName OS identity limitation
spbsoluble Apr 16, 2026
90055e8
docs(changelog): Add compliance remediation items to v1.3.0 changelog
spbsoluble Apr 16, 2026
186051e
docs(changelog): Remove audit severity labels from compliance remedia…
spbsoluble Apr 16, 2026
8621b38
docs: Clean up changelog and document SkipTlsValidation in DelineaCon…
spbsoluble Apr 16, 2026
dc56424
docs(readme): Set Username and ClientId to DataType 1 in manifest exa…
spbsoluble Apr 16, 2026
0f0a2b2
chore(docs): Update CHANGELOG.md
spbsoluble Apr 16, 2026
1df4b5b
refactor(pam): extract SecretServerPamBase and add grant-type-specifi…
spbsoluble Apr 23, 2026
fcec12d
test: add xUnit test project covering all four PAM types and auth flows
spbsoluble Apr 23, 2026
9682780
feat(manifest): register three new grant-type-specific PAM types
spbsoluble Apr 23, 2026
3bad85f
Update generated docs
Apr 23, 2026
d6f0310
docs: add docsource files for new PAM types and regenerate docs via d…
spbsoluble Apr 23, 2026
5518604
Update generated docs
Apr 23, 2026
fb95b3e
feat: support KEYFACTOR_PAM_SKIP_TLS_VALIDATION environment variable
spbsoluble Apr 23, 2026
e4d45cf
test: add tests for SkipTlsValidation config param and KEYFACTOR_PAM_…
spbsoluble Apr 23, 2026
44cc251
Update generated docs
Apr 23, 2026
ab8e502
test: add integration tests that skip gracefully when env vars are no…
spbsoluble Apr 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ obj/
riderModule.iml
/_ReSharper.Caches/
.idea/*
.vs/
.vs/
.env
scripts/
client_pam.json
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,54 @@
# v1.4.0

## Features

- Added three grant-type-specific PAM type variants. Each type exposes only the fields relevant to its authentication flow, resolving the Keyfactor Command UI requirement that all declared fields be populated.
- `Delinea-SecretServer-Password` — Username + Password authentication. Server parameters: `Host`, `Username`, `Password`, `SkipTlsValidation`.
- `Delinea-SecretServer-ClientCredentials` — OAuth2 client credentials flow. Server parameters: `Host`, `ClientId`, `ClientSecret`, `SkipTlsValidation`.
- `Delinea-SecretServer-Windows` — Integrated Windows Authentication (IWA). Server parameters: `Host`, `SkipTlsValidation`. NOTE: IWA is not supported on Secret Server Cloud.
- All shared logic (HTTP, validation, secret retrieval, audit logging) is implemented once in the new `SecretServerPamBase` abstract class.
- The existing `Delinea-SecretServer` type is unchanged and fully backwards compatible.

## Bug Fixes

- Fixed `client_credentials` case in `BuildDelineaConfiguration` where `GrantType` was incorrectly set to `"password"` instead of `"client_credentials"` on the resulting `DelineaConfiguration` object.
- Validation of `SecretFieldName` now rejects whitespace-only values (previously only empty string was rejected).

## Testing

- Replaced the manual `TestConsole` project with a proper `xUnit` test project (`delinea-secretserver-pam.Tests`, targeting `net8.0`) covering all four PAM types, all auth flows, and error paths including missing parameters, token failures, field-not-found, and non-success HTTP responses.

# v1.3.0

## Compliance Remediation (SOX/SOC2)

- `GetDelineaSecretAsync` now throws `InvalidSecretConfigurationException` when the requested field is not found in the secret, rather than silently returning an empty string. This prevents silent credential resolution failures from going undetected.
- Token endpoint error response body is now truncated to 500 characters before logging to prevent secret metadata exposure in log sinks.
- Added an explicit `LogInformation` audit event for the Windows authentication path recording OS identity, machine name, target URL, and SecretId before the HTTP call is made.
- Added an authentication success `LogInformation` event in `GetAccessToken` recording the caller identity and target URL with a structured `AuthenticationResult=Success` field.
- A `Guid`-based correlation ID is generated at the start of each `GetPassword` invocation and threaded as a trailing structured field through all `LogInformation` and `LogError` calls in `GetDelineaSecretAsync` and `GetAccessToken`, enabling log correlation across a full PAM operation.
- `Stopwatch` instances for the token POST and secret GET HTTP calls are now declared outside their try blocks; catch blocks record elapsed duration and emit a structured `HTTP call failed` log event so network failure timing is preserved in exception paths.
- Removed the duplicate `SecretResponse` class defined inline at the bottom of `SecretServerPam.cs`. The canonical definition in `Models/SecretResponse.cs` (which includes `Id`, `Name`, `SecretTemplateId`, `FolderId`, and `Active` in addition to `Items`) is now the sole definition, resolved via the existing `using Keyfactor.Extensions.Pam.Delinea.Models;` import.
- `Username` and `ClientId` parameters in `integration-manifest.json` changed from `DataType: 2` (secret/masked) to `DataType: 1` (plain text). These are non-secret identifiers and should not be stored or displayed as secrets in the Keyfactor Command UI.
- Added inline comments at each `Environment.UserName` usage site documenting that this value reflects the OS service account identity, not the Keyfactor Command caller identity, since `IPAMProvider` does not expose caller context.

## Improvements
- Enhanced debug logging for token endpoint requests: the obfuscated request body (credentials redacted) and raw response body are now logged on token request failures to aid troubleshooting.
- Added structured audit log event on every `GetPassword` invocation recording caller identity, machine name, target URL, grant type, SecretId, and field name.
- Added response duration logging (ms) for both the OAuth token endpoint and secret retrieval API calls.
- Success and failure log events now include SecretId, field name, grant type, and URL for complete audit trail.
- Auth failure log events now include the target URL, grant type, and caller identity.
- Error responses from Secret Server are truncated to 500 characters before logging to prevent sensitive metadata exposure.
- Removed raw token response body from deserialization failure log path to prevent accidental bearer token exposure.

## Bug Fixes
- Replaced `.Result` with `.GetAwaiter().GetResult()` in `GetPassword` to prevent exception masking on async task failures.

## Maintenance
- Removed dead `IValidatableObject` implementation from `DelineaConfiguration`; validation is enforced in `ValidateServerConfigurationParams`.
- Masked password value in TestConsole output.
- Bumped TestConsole target framework to net10.0 and global SDK pin to 10.0.0.

# v1.2.0

## Features
Expand Down
Loading
Loading