---
title: SAIF.Framework.Security.EnvironmentApi dependencies
summary: Internal and external dependencies for this library.
status: draft
owner: <owner>
last_reviewed: 2026-07-23
library: SAIF.Framework.Security.EnvironmentApi
reference_type: package
---

# SAIF.Framework.Security.EnvironmentApi dependencies

This library declares no in-solution `<ProjectReference>` entries; all of its non-BCL dependencies are consumed as NuGet package references, and it also integrates with a centralized WCF service and an HTTP-based Environment API.

## Internal dependencies

None declared. No `<ProjectReference>` entries exist in `SAIF.BOF.Framework.Security.EnvironmentApi.csproj` — internal-repository libraries are instead consumed as versioned NuGet packages, listed under External dependencies below*.

| Dependency | Type | Usage |
| --- | --- | --- |
| None | — | — |

## External dependencies

| Dependency | Version | Usage |
| --- | --- | --- |
| Newtonsoft.Json | 13.0.3 | `JsonConvert.DeserializeObject` for developer-settings override file parsing (`Services.Common\EnvironmentServiceBase.cs`) |
| SAIF.Framework.Common (external, unindexed) | 2.0.22074.3 | `SAIF.Common.Extensions` (`IsNullOrEmpty`, `ToStringAll`, `ApplicationName()`, `Enforce.ArgumentNotNullOrEmpty`, `Identity.UserId()`) used throughout `EnvironmentServiceBase.cs`, `IEnvironmentService.cs`, `WcfEnvironmentService.cs`, `SystemHashUtil.cs`; classified as framework-inherited |
| SAIF.HashUtil (external, unindexed) | 2.0.22083.2 | `SAIF.HashUtil.SaltShaker` and `SystemHashExpiredException` used in `SystemHashUtil.cs`; classified as framework-inherited |
| WCF SecurityService endpoint | N/A (service, not a package) | `http://saifonline/WCF/Security` (binding `BasicHttpBinding_Security`), consumed via the generated proxy in `Connected Services\SecurityService\Reference.cs` and wrapped by `SecurityServiceClient.GetUsersByGroup` (`Core\Services\SecurityServiceClient.cs`); provides an alternative, server-side path to AD group-membership data alongside the local `ADService` path |

## Dependency risks and notes
- `SAIF.Framework.Common` and `SAIF.HashUtil` are external, unindexed packages — their internal implementation is not analyzed as part of this library's documentation set; only their consumed surface (extension methods, `SaltShaker`, `SystemHashExpiredException`) is traceable here**.
- The WCF `SecurityService` endpoint (`http://saifonline/WCF/Security`) exposes `IsAuthorized`/`IsAuthorized2` (user/role authorization) and `GetUsersByGroup` (AD group enumeration), but only `GetUsersByGroup` is consumed by this library's `SecurityServiceClient` wrapper — `IsAuthorized`/`IsAuthorized2` exist only as unused generated-proxy methods with no local caller found.
- No call site invoking `SecurityServiceClient` was found elsewhere within this library — it is a thin wrapper provided for use by downstream consumers rather than used internally, meaning drift between this library's local `ADService` authorization path and the WCF-based path is not internally enforced or reconciled.
- `SecurityServiceClient` hard-codes default LDAP/domain constants (`LDAP = "LDAP://slmdc01.corp.saif.com:389/DC=corp,DC=saif,DC=com"`, `DOMAIN = "saif"`) rather than reading them from `EnvironmentConfigKeys.SecurityServiceUrl`; the actual service URL is supplied externally by the caller's constructor argument, not read internally from that config key.
- The local AD-authorization path (`ADService`, used by `MachineSecurityService`) resolves its LDAP host/domain values (`ad.ldap.host`, `ad.ldap.internal.root`, `ad.internal.domain`) at runtime via the Environment API rather than from a static config file; actual production values are not verifiable from static analysis alone*.
- `MachineSecurityService.IsAuthorized` fails closed (returns `false`) on any AD-lookup exception, logging only via `Debug.WriteLine` — failures in the AD dependency are not surfaced through structured audit/security logging.
- This library also depends on an HTTP-based Environment API service (base URL resolved from the OS environment variable `EnvironmentApiUrl`) for all configuration-settings retrieval; this is a runtime service dependency rather than a package dependency, and its absence throws `MissingEnvironmentUrlVariableException`.
- Whether any downstream (non-EnvironmentApi) library calls `IsAuthorized`/`IsAuthorized2` on the generated `SecurityService.SecurityClient` proxy, or instantiates `SecurityServiceClient`/`MachineSecurityService` directly, is out of scope for this library-level analysis and was not verified**.

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)
- [Configuration](configuration.md)
- [Security and authorization](security-authorization.md)
- [API reference](api/index.md)

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- SAIF.Framework.Security.EnvironmentApi\SAIF.BOF.Framework.Security.EnvironmentApi.csproj
- SAIF.Framework.Security.EnvironmentApi\Services.Common\EnvironmentServiceBase.cs
- SAIF.Framework.Security.EnvironmentApi\Services.Common\SystemHashUtil.cs
- SAIF.Framework.Security.EnvironmentApi\Services.Common\EnvironmentConfigKeys.cs
- SAIF.Framework.Security.EnvironmentApi\Core\Services\SecurityServiceClient.cs
- SAIF.Framework.Security.EnvironmentApi\Core\Services\MachineSecurityService.cs
- SAIF.Framework.Security.EnvironmentApi\Core\Services\ADService.cs
- SAIF.Framework.Security.EnvironmentApi\Connected Services\SecurityService\Reference.cs
- SAIF.Framework.Security.EnvironmentApi\Connected Services\SecurityService\SecurityService.wsdl
- SAIF.Framework.Security.EnvironmentApi\app.config
- SAIF.Framework.Security.EnvironmentApi\Exceptions\MissingEnvironmentUrlVariableException.cs
