diff --git a/Directory.Build.props b/Directory.Build.props index d1464a7..c60c7b4 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -19,7 +19,7 @@ - netstandard2.0;netstandard2.1;net462;net8.0 + netstandard2.0;netstandard2.1;net462;net8.0;net9.0 true ../../build/MSAL.snk true diff --git a/src/Microsoft.Identity.Abstractions/ApplicationOptions/CredentialDescriptionJsonConverter.cs b/src/Microsoft.Identity.Abstractions/ApplicationOptions/CredentialDescriptionJsonConverter.cs new file mode 100644 index 0000000..228c6b4 --- /dev/null +++ b/src/Microsoft.Identity.Abstractions/ApplicationOptions/CredentialDescriptionJsonConverter.cs @@ -0,0 +1,196 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#if NET8_0_OR_GREATER +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Microsoft.Identity.Abstractions +{ + /// + /// Custom JSON converter for CredentialDescription to handle proper serialization/deserialization + /// of credential information based on SourceType. + /// + /// BE CAREFUL when you serialize a credential description. The secrets it contains + /// will be serialized too depending on the CredentialSource (ClientSecret, Base64Encoded, and Password) + public class CredentialDescriptionJsonConverter : JsonConverter + { + /// + public override CredentialDescription Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.StartObject) + { + throw new JsonException("Expected start of object"); + } + + var credentialDescription = new CredentialDescription(); + + while (reader.Read()) + { + if (reader.TokenType == JsonTokenType.EndObject) + { + return credentialDescription; + } + + if (reader.TokenType != JsonTokenType.PropertyName) + { + throw new JsonException("Expected property name"); + } + + string propertyName = reader.GetString()!; + reader.Read(); + + switch (propertyName.ToLowerInvariant()) + { + case string _ when propertyName.Equals(nameof(CredentialDescription.SourceType), StringComparison.OrdinalIgnoreCase): + string sourceType = reader.GetString()!; + credentialDescription.SourceType = Enum.Parse(sourceType); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.Base64EncodedValue), StringComparison.OrdinalIgnoreCase): + credentialDescription.Base64EncodedValue = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CertificateStorePath), StringComparison.OrdinalIgnoreCase): + credentialDescription.CertificateStorePath = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CertificateDistinguishedName), StringComparison.OrdinalIgnoreCase): + credentialDescription.CertificateDistinguishedName = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CertificateThumbprint), StringComparison.OrdinalIgnoreCase): + credentialDescription.CertificateThumbprint = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CertificateDiskPath), StringComparison.OrdinalIgnoreCase): + credentialDescription.CertificateDiskPath = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CertificatePassword), StringComparison.OrdinalIgnoreCase): + credentialDescription.CertificatePassword = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.ClientSecret), StringComparison.OrdinalIgnoreCase): + credentialDescription.ClientSecret = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.ManagedIdentityClientId), StringComparison.OrdinalIgnoreCase): + credentialDescription.ManagedIdentityClientId = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.SignedAssertionFileDiskPath), StringComparison.OrdinalIgnoreCase): + credentialDescription.SignedAssertionFileDiskPath = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.KeyVaultUrl), StringComparison.OrdinalIgnoreCase): + credentialDescription.KeyVaultUrl = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.KeyVaultCertificateName), StringComparison.OrdinalIgnoreCase): + credentialDescription.KeyVaultCertificateName = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.TokenExchangeUrl), StringComparison.OrdinalIgnoreCase): + credentialDescription.TokenExchangeUrl = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.TokenExchangeAuthority), StringComparison.OrdinalIgnoreCase): + credentialDescription.TokenExchangeAuthority = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.Skip), StringComparison.OrdinalIgnoreCase): + credentialDescription.Skip = reader.GetBoolean(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CustomSignedAssertionProviderName), StringComparison.OrdinalIgnoreCase): + credentialDescription.CustomSignedAssertionProviderName = reader.GetString(); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.CustomSignedAssertionProviderData), StringComparison.OrdinalIgnoreCase): + credentialDescription.CustomSignedAssertionProviderData = + JsonSerializer.Deserialize>(ref reader, options); + break; + case string _ when propertyName.Equals(nameof(CredentialDescription.DecryptKeysAuthenticationOptions), StringComparison.OrdinalIgnoreCase): + credentialDescription.DecryptKeysAuthenticationOptions = + JsonSerializer.Deserialize(ref reader, options); + break; + } + } + + throw new JsonException("Expected end of object"); + } + + /// + public override void Write(Utf8JsonWriter writer, CredentialDescription value, JsonSerializerOptions options) + { + ArgumentNullException.ThrowIfNull(writer); + ArgumentNullException.ThrowIfNull(value); + writer.WriteStartObject(); + + writer.WritePropertyName("SourceType"); + JsonSerializer.Serialize(writer, Enum.GetName(value.SourceType), options); + + switch (value.SourceType) + { + case CredentialSource.Base64Encoded: + if (!string.IsNullOrEmpty(value.Base64EncodedValue)) + writer.WriteString(nameof(CredentialDescription.Base64EncodedValue), value.Base64EncodedValue); + break; + + case CredentialSource.Path: + if (!string.IsNullOrEmpty(value.CertificateDiskPath)) + writer.WriteString(nameof(CredentialDescription.CertificateDiskPath), value.CertificateDiskPath); + if (!string.IsNullOrEmpty(value.CertificatePassword)) + writer.WriteString(nameof(CredentialDescription.CertificatePassword), value.CertificatePassword); + break; + + case CredentialSource.StoreWithThumbprint: + if (!string.IsNullOrEmpty(value.CertificateStorePath)) + writer.WriteString(nameof(CredentialDescription.CertificateStorePath), value.CertificateStorePath); + if (!string.IsNullOrEmpty(value.CertificateThumbprint)) + writer.WriteString(nameof(CredentialDescription.CertificateThumbprint), value.CertificateThumbprint); + break; + + case CredentialSource.StoreWithDistinguishedName: + if (!string.IsNullOrEmpty(value.CertificateStorePath)) + writer.WriteString(nameof(CredentialDescription.CertificateStorePath), value.CertificateStorePath); + if (!string.IsNullOrEmpty(value.CertificateDistinguishedName)) + writer.WriteString(nameof(CredentialDescription.CertificateDistinguishedName), value.CertificateDistinguishedName); + break; + + case CredentialSource.KeyVault: + if (!string.IsNullOrEmpty(value.KeyVaultUrl)) + writer.WriteString(nameof(CredentialDescription.KeyVaultUrl), value.KeyVaultUrl); + if (!string.IsNullOrEmpty(value.KeyVaultCertificateName)) + writer.WriteString(nameof(CredentialDescription.KeyVaultCertificateName), value.KeyVaultCertificateName); + break; + + case CredentialSource.ClientSecret: + if (!string.IsNullOrEmpty(value.ClientSecret)) + writer.WriteString(nameof(CredentialDescription.ClientSecret), value.ClientSecret); + break; + + case CredentialSource.SignedAssertionFromManagedIdentity: + if (!string.IsNullOrEmpty(value.ManagedIdentityClientId)) + writer.WriteString(nameof(CredentialDescription.ManagedIdentityClientId), value.ManagedIdentityClientId); + if (!string.IsNullOrEmpty(value.TokenExchangeUrl)) + writer.WriteString(nameof(CredentialDescription.TokenExchangeUrl), value.TokenExchangeUrl); + if (!string.IsNullOrEmpty(value.TokenExchangeAuthority)) + writer.WriteString(nameof(CredentialDescription.TokenExchangeAuthority), value.TokenExchangeAuthority); + break; + + case CredentialSource.SignedAssertionFilePath: + if (!string.IsNullOrEmpty(value.SignedAssertionFileDiskPath)) + writer.WriteString(nameof(CredentialDescription.SignedAssertionFileDiskPath), value.SignedAssertionFileDiskPath); + break; + + case CredentialSource.AutoDecryptKeys: + if (value.DecryptKeysAuthenticationOptions != null) + { + writer.WritePropertyName(nameof(CredentialDescription.DecryptKeysAuthenticationOptions)); + JsonSerializer.Serialize(writer, value.DecryptKeysAuthenticationOptions, options); + } + break; + + case CredentialSource.CustomSignedAssertion: + if (!string.IsNullOrEmpty(value.CustomSignedAssertionProviderName)) + writer.WriteString(nameof(CredentialDescription.CustomSignedAssertionProviderName), value.CustomSignedAssertionProviderName); + if (value.CustomSignedAssertionProviderData != null) + { + writer.WritePropertyName(nameof(CredentialDescription.CustomSignedAssertionProviderData)); + JsonSerializer.Serialize(writer, value.CustomSignedAssertionProviderData, options); + } + break; + } + + writer.WriteEndObject(); + } + } +} +#endif diff --git a/src/Microsoft.Identity.Abstractions/Microsoft.Identity.Abstractions.csproj b/src/Microsoft.Identity.Abstractions/Microsoft.Identity.Abstractions.csproj index 7c8f20f..350c8c1 100644 --- a/src/Microsoft.Identity.Abstractions/Microsoft.Identity.Abstractions.csproj +++ b/src/Microsoft.Identity.Abstractions/Microsoft.Identity.Abstractions.csproj @@ -39,5 +39,5 @@ - + diff --git a/src/Microsoft.Identity.Abstractions/PublicAPI/net8.0/PublicAPI.Unshipped.txt b/src/Microsoft.Identity.Abstractions/PublicAPI/net8.0/PublicAPI.Unshipped.txt index cadcb88..3823a8a 100644 --- a/src/Microsoft.Identity.Abstractions/PublicAPI/net8.0/PublicAPI.Unshipped.txt +++ b/src/Microsoft.Identity.Abstractions/PublicAPI/net8.0/PublicAPI.Unshipped.txt @@ -1,4 +1,6 @@ #nullable enable +Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter +Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter.CredentialDescriptionJsonConverter() -> void Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider.CreateAuthorizationHeaderAsync(Microsoft.Identity.Abstractions.DownstreamApiOptions! downstreamApiOptions, System.Security.Claims.ClaimsPrincipal? claimsPrincipal = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions @@ -17,5 +19,7 @@ Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.SendX5C.get -> Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.SendX5C.set -> void Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.TenantId.get -> string? Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.TenantId.set -> void +override Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter.Read(ref System.Text.Json.Utf8JsonReader reader, System.Type! typeToConvert, System.Text.Json.JsonSerializerOptions! options) -> Microsoft.Identity.Abstractions.CredentialDescription! +override Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter.Write(System.Text.Json.Utf8JsonWriter! writer, Microsoft.Identity.Abstractions.CredentialDescription! value, System.Text.Json.JsonSerializerOptions! options) -> void override Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Authority.get -> string? override Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Authority.set -> void diff --git a/src/Microsoft.Identity.Abstractions/PublicAPI/net9.0/PublicAPI.Shipped.txt b/src/Microsoft.Identity.Abstractions/PublicAPI/net9.0/PublicAPI.Shipped.txt new file mode 100644 index 0000000..fd1143c --- /dev/null +++ b/src/Microsoft.Identity.Abstractions/PublicAPI/net9.0/PublicAPI.Shipped.txt @@ -0,0 +1,274 @@ +#nullable enable +Microsoft.Identity.Abstractions.AcquireTokenOptions +Microsoft.Identity.Abstractions.AcquireTokenOptions.AcquireTokenOptions() -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.AcquireTokenOptions(Microsoft.Identity.Abstractions.AcquireTokenOptions! other) -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.AuthenticationOptionsName.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.AuthenticationOptionsName.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.Claims.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.Claims.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.CorrelationId.get -> System.Guid? +Microsoft.Identity.Abstractions.AcquireTokenOptions.CorrelationId.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.ExtraHeadersParameters.get -> System.Collections.Generic.IDictionary? +Microsoft.Identity.Abstractions.AcquireTokenOptions.ExtraHeadersParameters.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.ExtraQueryParameters.get -> System.Collections.Generic.IDictionary? +Microsoft.Identity.Abstractions.AcquireTokenOptions.ExtraQueryParameters.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.FmiPath.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.FmiPath.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.ForceRefresh.get -> bool +Microsoft.Identity.Abstractions.AcquireTokenOptions.ForceRefresh.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.LongRunningWebApiSessionKey.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.LongRunningWebApiSessionKey.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.ManagedIdentity.get -> Microsoft.Identity.Abstractions.ManagedIdentityOptions? +Microsoft.Identity.Abstractions.AcquireTokenOptions.ManagedIdentity.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.PopClaim.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.PopClaim.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.PopPublicKey.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.PopPublicKey.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.Tenant.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.Tenant.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.UserFlow.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenOptions.UserFlow.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult +Microsoft.Identity.Abstractions.AcquireTokenResult.AccessToken.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenResult.AccessToken.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.AcquireTokenResult(string! accessToken, System.DateTimeOffset expiresOn, string! tenantId, string! idToken, System.Collections.Generic.IEnumerable! scopes, System.Guid correlationId, string! tokenType) -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.CorrelationId.get -> System.Guid +Microsoft.Identity.Abstractions.AcquireTokenResult.CorrelationId.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.ExpiresOn.get -> System.DateTimeOffset +Microsoft.Identity.Abstractions.AcquireTokenResult.ExpiresOn.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.IdToken.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenResult.IdToken.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.Scopes.get -> System.Collections.Generic.IEnumerable? +Microsoft.Identity.Abstractions.AcquireTokenResult.Scopes.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.TenantId.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenResult.TenantId.set -> void +Microsoft.Identity.Abstractions.AcquireTokenResult.TokenType.get -> string? +Microsoft.Identity.Abstractions.AcquireTokenResult.TokenType.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.AcquireTokenOptions.get -> Microsoft.Identity.Abstractions.AcquireTokenOptions! +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.AcquireTokenOptions.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.AuthorizationHeaderProviderOptions() -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.AuthorizationHeaderProviderOptions(Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions! other) -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.BaseUrl.get -> string? +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.BaseUrl.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.Clone() -> Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions! +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.CustomizeHttpRequestMessage.get -> System.Action? +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.CustomizeHttpRequestMessage.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.GetApiUrl() -> string! +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.HttpMethod.get -> string! +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.HttpMethod.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.ProtocolScheme.get -> string! +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.ProtocolScheme.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.RelativePath.get -> string! +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.RelativePath.set -> void +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.RequestAppToken.get -> bool +Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.RequestAppToken.set -> void +Microsoft.Identity.Abstractions.CredentialDescription +Microsoft.Identity.Abstractions.CredentialDescription.CredentialDescription(Microsoft.Identity.Abstractions.CredentialDescription! other) -> void +Microsoft.Identity.Abstractions.CredentialDescription.Base64EncodedValue.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.Base64EncodedValue.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.Certificate.get -> System.Security.Cryptography.X509Certificates.X509Certificate2? +Microsoft.Identity.Abstractions.CredentialDescription.Certificate.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CertificateDiskPath.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.CertificateDiskPath.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CertificateDistinguishedName.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.CertificateDistinguishedName.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CertificatePassword.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.CertificatePassword.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CertificateStorePath.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.CertificateStorePath.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CertificateThumbprint.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.CertificateThumbprint.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.ClientSecret.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.ClientSecret.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CredentialDescription() -> void +Microsoft.Identity.Abstractions.CredentialDescription.CredentialType.get -> Microsoft.Identity.Abstractions.CredentialType +Microsoft.Identity.Abstractions.CredentialDescription.CustomSignedAssertionProviderData.get -> System.Collections.Generic.Dictionary? +Microsoft.Identity.Abstractions.CredentialDescription.CustomSignedAssertionProviderData.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.CustomSignedAssertionProviderName.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.CustomSignedAssertionProviderName.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.DecryptKeysAuthenticationOptions.get -> Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions? +Microsoft.Identity.Abstractions.CredentialDescription.DecryptKeysAuthenticationOptions.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.Id.get -> string! +Microsoft.Identity.Abstractions.CredentialDescription.KeyVaultCertificateName.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.KeyVaultCertificateName.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.KeyVaultUrl.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.KeyVaultUrl.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.ManagedIdentityClientId.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.ManagedIdentityClientId.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.SignedAssertionFileDiskPath.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.SignedAssertionFileDiskPath.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.Skip.get -> bool +Microsoft.Identity.Abstractions.CredentialDescription.Skip.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.SourceType.get -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialDescription.SourceType.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.TokenExchangeAuthority.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.TokenExchangeAuthority.set -> void +Microsoft.Identity.Abstractions.CredentialDescription.TokenExchangeUrl.get -> string? +Microsoft.Identity.Abstractions.CredentialDescription.TokenExchangeUrl.set -> void +Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.AutoDecryptKeys = 10 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.Base64Encoded = 2 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.Certificate = 0 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.ClientSecret = 6 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.CustomSignedAssertion = 11 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.KeyVault = 1 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.Path = 3 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.SignedAssertionFilePath = 8 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.SignedAssertionFromManagedIdentity = 7 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.SignedAssertionFromVault = 9 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.StoreWithDistinguishedName = 5 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSource.StoreWithThumbprint = 4 -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters +Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters.Authority.get -> string! +Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters.Authority.set -> void +Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters.ClientId.get -> string! +Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters.ClientId.set -> void +Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters.CredentialSourceLoaderParameters(string! clientId, string! authority) -> void +Microsoft.Identity.Abstractions.CredentialType +Microsoft.Identity.Abstractions.CredentialType.Certificate = 0 -> Microsoft.Identity.Abstractions.CredentialType +Microsoft.Identity.Abstractions.CredentialType.DecryptKeys = 3 -> Microsoft.Identity.Abstractions.CredentialType +Microsoft.Identity.Abstractions.CredentialType.Secret = 1 -> Microsoft.Identity.Abstractions.CredentialType +Microsoft.Identity.Abstractions.CredentialType.SignedAssertion = 2 -> Microsoft.Identity.Abstractions.CredentialType +Microsoft.Identity.Abstractions.DownstreamApiOptions +Microsoft.Identity.Abstractions.DownstreamApiOptions.AcceptHeader.get -> string! +Microsoft.Identity.Abstractions.DownstreamApiOptions.AcceptHeader.set -> void +Microsoft.Identity.Abstractions.DownstreamApiOptions.Clone() -> Microsoft.Identity.Abstractions.DownstreamApiOptions! +Microsoft.Identity.Abstractions.DownstreamApiOptions.ContentType.get -> string! +Microsoft.Identity.Abstractions.DownstreamApiOptions.ContentType.set -> void +Microsoft.Identity.Abstractions.DownstreamApiOptions.Deserializer.get -> System.Func? +Microsoft.Identity.Abstractions.DownstreamApiOptions.Deserializer.set -> void +Microsoft.Identity.Abstractions.DownstreamApiOptions.DownstreamApiOptions() -> void +Microsoft.Identity.Abstractions.DownstreamApiOptions.DownstreamApiOptions(Microsoft.Identity.Abstractions.DownstreamApiOptions! other) -> void +Microsoft.Identity.Abstractions.DownstreamApiOptions.Scopes.get -> System.Collections.Generic.IEnumerable? +Microsoft.Identity.Abstractions.DownstreamApiOptions.Scopes.set -> void +Microsoft.Identity.Abstractions.DownstreamApiOptions.Serializer.get -> System.Func? +Microsoft.Identity.Abstractions.DownstreamApiOptions.Serializer.set -> void +Microsoft.Identity.Abstractions.DownstreamApiOptionsReadOnlyHttpMethod +Microsoft.Identity.Abstractions.DownstreamApiOptionsReadOnlyHttpMethod.Clone() -> Microsoft.Identity.Abstractions.DownstreamApiOptionsReadOnlyHttpMethod! +Microsoft.Identity.Abstractions.DownstreamApiOptionsReadOnlyHttpMethod.DownstreamApiOptionsReadOnlyHttpMethod(Microsoft.Identity.Abstractions.DownstreamApiOptions! options, string! httpMethod) -> void +Microsoft.Identity.Abstractions.DownstreamApiOptionsReadOnlyHttpMethod.HttpMethod.get -> string! +Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider +Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider.CreateAuthorizationHeaderAsync(System.Collections.Generic.IEnumerable! scopes, Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions? options = null, System.Security.Claims.ClaimsPrincipal? claimsPrincipal = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider.CreateAuthorizationHeaderForAppAsync(string! scopes, Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions? downstreamApiOptions = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(System.Collections.Generic.IEnumerable! scopes, Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions? authorizationHeaderProviderOptions = null, System.Security.Claims.ClaimsPrincipal? claimsPrincipal = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ICredentialsLoader +Microsoft.Identity.Abstractions.ICredentialsLoader.CredentialSourceLoaders.get -> System.Collections.Generic.IDictionary! +Microsoft.Identity.Abstractions.ICredentialsLoader.LoadCredentialsIfNeededAsync(Microsoft.Identity.Abstractions.CredentialDescription! credentialDescription, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ICredentialsLoader.LoadFirstValidCredentialsAsync(System.Collections.Generic.IEnumerable! credentialDescriptions, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ICredentialsLoader.ResetCredentials(System.Collections.Generic.IEnumerable! credentialDescriptions) -> void +Microsoft.Identity.Abstractions.ICredentialSourceLoader +Microsoft.Identity.Abstractions.ICredentialSourceLoader.CredentialSource.get -> Microsoft.Identity.Abstractions.CredentialSource +Microsoft.Identity.Abstractions.ICredentialSourceLoader.LoadIfNeededAsync(Microsoft.Identity.Abstractions.CredentialDescription! credentialDescription, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ICustomSignedAssertionProvider +Microsoft.Identity.Abstractions.ICustomSignedAssertionProvider.Name.get -> string! +Microsoft.Identity.Abstractions.IdentityApplicationOptions +Microsoft.Identity.Abstractions.IdentityApplicationOptions.AllowWebApiToBeAuthorizedByACL.get -> bool +Microsoft.Identity.Abstractions.IdentityApplicationOptions.AllowWebApiToBeAuthorizedByACL.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.Audience.get -> string? +Microsoft.Identity.Abstractions.IdentityApplicationOptions.Audience.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.Audiences.get -> System.Collections.Generic.IEnumerable? +Microsoft.Identity.Abstractions.IdentityApplicationOptions.Audiences.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.ClientCredentials.get -> System.Collections.Generic.IEnumerable? +Microsoft.Identity.Abstractions.IdentityApplicationOptions.ClientCredentials.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.ClientId.get -> string? +Microsoft.Identity.Abstractions.IdentityApplicationOptions.ClientId.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.EnablePiiLogging.get -> bool +Microsoft.Identity.Abstractions.IdentityApplicationOptions.EnablePiiLogging.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.ExtraQueryParameters.get -> System.Collections.Generic.IDictionary? +Microsoft.Identity.Abstractions.IdentityApplicationOptions.ExtraQueryParameters.set -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.IdentityApplicationOptions() -> void +Microsoft.Identity.Abstractions.IdentityApplicationOptions.TokenDecryptionCredentials.get -> System.Collections.Generic.IEnumerable? +Microsoft.Identity.Abstractions.IdentityApplicationOptions.TokenDecryptionCredentials.set -> void +Microsoft.Identity.Abstractions.IDownstreamApi +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiAsync(Microsoft.Identity.Abstractions.DownstreamApiOptions! downstreamApiOptions, System.Security.Claims.ClaimsPrincipal? user = null, System.Net.Http.HttpContent? content = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiAsync(string? serviceName, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Net.Http.HttpContent? content = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForAppAsync(string? serviceName, System.Action? downstreamApiOptionsOverride = null, System.Net.Http.HttpContent? content = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForAppAsync(string! serviceName, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForAppAsync(string! serviceName, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForUserAsync(string? serviceName, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Net.Http.HttpContent? content = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForUserAsync(string! serviceName, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.CallApiForUserAsync(string! serviceName, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.DeleteForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForAppAsync(string? serviceName, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForAppAsync(string? serviceName, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForUserAsync(string? serviceName, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.GetForUserAsync(string? serviceName, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PatchForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PostForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForAppAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForAppAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Text.Json.Serialization.Metadata.JsonTypeInfo! outputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForUserAsync(string? serviceName, TInput input, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.IDownstreamApi.PutForUserAsync(string? serviceName, TInput input, System.Text.Json.Serialization.Metadata.JsonTypeInfo! inputJsonTypeInfo, System.Action? downstreamApiOptionsOverride = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ITokenAcquirer +Microsoft.Identity.Abstractions.ITokenAcquirer.GetTokenForAppAsync(string! scope, Microsoft.Identity.Abstractions.AcquireTokenOptions? tokenAcquisitionOptions = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ITokenAcquirer.GetTokenForUserAsync(System.Collections.Generic.IEnumerable! scopes, Microsoft.Identity.Abstractions.AcquireTokenOptions? tokenAcquisitionOptions = null, System.Security.Claims.ClaimsPrincipal? user = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.ITokenAcquirerFactory +Microsoft.Identity.Abstractions.ITokenAcquirerFactory.GetTokenAcquirer(Microsoft.Identity.Abstractions.IdentityApplicationOptions! identityApplicationOptions) -> Microsoft.Identity.Abstractions.ITokenAcquirer! +Microsoft.Identity.Abstractions.ITokenAcquirerFactory.GetTokenAcquirer(string! optionName = "") -> Microsoft.Identity.Abstractions.ITokenAcquirer! +Microsoft.Identity.Abstractions.ManagedIdentityOptions +Microsoft.Identity.Abstractions.ManagedIdentityOptions.Clone() -> Microsoft.Identity.Abstractions.ManagedIdentityOptions! +Microsoft.Identity.Abstractions.ManagedIdentityOptions.ManagedIdentityOptions() -> void +Microsoft.Identity.Abstractions.ManagedIdentityOptions.UserAssignedClientId.get -> string? +Microsoft.Identity.Abstractions.ManagedIdentityOptions.UserAssignedClientId.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.DefaultUserFlow.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.Domain.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.Domain.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.EditProfilePolicyId.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.EditProfilePolicyId.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.ErrorPath.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.ErrorPath.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.MicrosoftIdentityApplicationOptions() -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.ResetPasswordPath.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.ResetPasswordPath.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.ResetPasswordPolicyId.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.ResetPasswordPolicyId.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.SignUpSignInPolicyId.get -> string? +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.SignUpSignInPolicyId.set -> void +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.WithSpaAuthCode.get -> bool +Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions.WithSpaAuthCode.set -> void +override Microsoft.Identity.Abstractions.DownstreamApiOptions.CloneInternal() -> Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions! +override Microsoft.Identity.Abstractions.DownstreamApiOptionsReadOnlyHttpMethod.CloneInternal() -> Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions! +static Microsoft.Identity.Abstractions.AcquireTokenOptions.LongRunningWebApiSessionKeyAuto.get -> string! +virtual Microsoft.Identity.Abstractions.AcquireTokenOptions.Clone() -> Microsoft.Identity.Abstractions.AcquireTokenOptions! +virtual Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions.CloneInternal() -> Microsoft.Identity.Abstractions.AuthorizationHeaderProviderOptions! +virtual Microsoft.Identity.Abstractions.CredentialDescription.CachedValue.get -> object? +virtual Microsoft.Identity.Abstractions.CredentialDescription.CachedValue.set -> void +virtual Microsoft.Identity.Abstractions.IdentityApplicationOptions.Authority.get -> string? +virtual Microsoft.Identity.Abstractions.IdentityApplicationOptions.Authority.set -> void +Microsoft.Identity.Abstractions.AcquireTokenOptions.ExtraParameters.get -> System.Collections.Generic.IDictionary? +Microsoft.Identity.Abstractions.AcquireTokenOptions.ExtraParameters.set -> void diff --git a/src/Microsoft.Identity.Abstractions/PublicAPI/net9.0/PublicAPI.Unshipped.txt b/src/Microsoft.Identity.Abstractions/PublicAPI/net9.0/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..3823a8a --- /dev/null +++ b/src/Microsoft.Identity.Abstractions/PublicAPI/net9.0/PublicAPI.Unshipped.txt @@ -0,0 +1,25 @@ +#nullable enable +Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter +Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter.CredentialDescriptionJsonConverter() -> void +Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider +Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider.CreateAuthorizationHeaderAsync(Microsoft.Identity.Abstractions.DownstreamApiOptions! downstreamApiOptions, System.Security.Claims.ClaimsPrincipal? claimsPrincipal = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.AppHomeTenantId.get -> string? +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.AppHomeTenantId.set -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.AzureRegion.get -> string? +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.AzureRegion.set -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.ClientCapabilities.get -> System.Collections.Generic.IEnumerable? +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.ClientCapabilities.set -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Instance.get -> string? +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Instance.set -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.MicrosoftEntraApplicationOptions() -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Name.get -> string? +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Name.set -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.SendX5C.get -> bool +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.SendX5C.set -> void +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.TenantId.get -> string? +Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.TenantId.set -> void +override Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter.Read(ref System.Text.Json.Utf8JsonReader reader, System.Type! typeToConvert, System.Text.Json.JsonSerializerOptions! options) -> Microsoft.Identity.Abstractions.CredentialDescription! +override Microsoft.Identity.Abstractions.CredentialDescriptionJsonConverter.Write(System.Text.Json.Utf8JsonWriter! writer, Microsoft.Identity.Abstractions.CredentialDescription! value, System.Text.Json.JsonSerializerOptions! options) -> void +override Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Authority.get -> string? +override Microsoft.Identity.Abstractions.MicrosoftEntraApplicationOptions.Authority.set -> void diff --git a/test/Microsoft.Identity.Abstractions.Tests/CredentialDescriptionJsonConverterTest.cs b/test/Microsoft.Identity.Abstractions.Tests/CredentialDescriptionJsonConverterTest.cs new file mode 100644 index 0000000..0231aa0 --- /dev/null +++ b/test/Microsoft.Identity.Abstractions.Tests/CredentialDescriptionJsonConverterTest.cs @@ -0,0 +1,186 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#if NET8_0_OR_GREATER +using System.Text.Json; +using Xunit; + +namespace Microsoft.Identity.Abstractions.ApplicationOptions.Tests +{ + public class CredentialDescriptionJsonConverterTest + { + private readonly JsonSerializerOptions _options; + + public CredentialDescriptionJsonConverterTest() + { + _options = new JsonSerializerOptions + { + Converters = { new CredentialDescriptionJsonConverter() } + }; + } + + [Fact] + public void SerializeDeserialize_Base64Encoded() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.Base64Encoded, + Base64EncodedValue = "MIIDHzCgegA.....r1n8Ta0=" + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.Base64EncodedValue, deserialized.Base64EncodedValue); + Assert.Equal(CredentialType.Certificate, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_CertificateFromPath() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.Path, + CertificateDiskPath = @"c:\temp\WebAppCallingWebApiCert.pfx", + CertificatePassword = "password" + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.CertificateDiskPath, deserialized.CertificateDiskPath); + Assert.Equal(original.CertificatePassword, deserialized.CertificatePassword); + Assert.Equal(CredentialType.Certificate, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_CertificateFromStoreByThumbprint() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.StoreWithThumbprint, + CertificateStorePath = "LocalMachine/My", + CertificateThumbprint = "962D129A...D18EFEB6961684" + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.CertificateStorePath, deserialized.CertificateStorePath); + Assert.Equal(original.CertificateThumbprint, deserialized.CertificateThumbprint); + Assert.Equal(CredentialType.Certificate, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_CertificateFromKeyVault() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.KeyVault, + KeyVaultUrl = "https://msidentitywebsamples.vault.azure.net", + KeyVaultCertificateName = "MicrosoftIdentitySamplesCert" + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.KeyVaultUrl, deserialized.KeyVaultUrl); + Assert.Equal(original.KeyVaultCertificateName, deserialized.KeyVaultCertificateName); + Assert.Equal(CredentialType.Certificate, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_Secret() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.ClientSecret, + ClientSecret = "blah" + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.ClientSecret, deserialized.ClientSecret); + Assert.Equal(CredentialType.Secret, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_SignedAssertionFromMSI() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.SignedAssertionFromManagedIdentity, + ManagedIdentityClientId = "12345" + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.ManagedIdentityClientId, deserialized.ManagedIdentityClientId); + Assert.Equal(CredentialType.SignedAssertion, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_AutoDecryptKeys() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.AutoDecryptKeys, + DecryptKeysAuthenticationOptions = new AuthorizationHeaderProviderOptions + { + ProtocolScheme = "Bearer", + AcquireTokenOptions = new AcquireTokenOptions + { + Tenant = "mytenant.onmicrosoftonline.com" + } + } + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.DecryptKeysAuthenticationOptions.ProtocolScheme, deserialized.DecryptKeysAuthenticationOptions?.ProtocolScheme); + Assert.Equal(original.DecryptKeysAuthenticationOptions.AcquireTokenOptions.Tenant, deserialized.DecryptKeysAuthenticationOptions?.AcquireTokenOptions.Tenant); + Assert.Equal(CredentialType.DecryptKeys, deserialized.CredentialType); + } + + [Fact] + public void SerializeDeserialize_CustomSignedAssertion() + { + var original = new CredentialDescription + { + SourceType = CredentialSource.CustomSignedAssertion, + CustomSignedAssertionProviderName = "MyCustomProvider", + CustomSignedAssertionProviderData = new System.Collections.Generic.Dictionary + { + { "MyCustomProviderData_Key", "MyCustomProviderData_Data" } + } + }; + + string json = JsonSerializer.Serialize(original, _options); + var deserialized = JsonSerializer.Deserialize(json, _options); + + Assert.NotNull(deserialized); + Assert.Equal(original.SourceType, deserialized.SourceType); + Assert.Equal(original.CustomSignedAssertionProviderName, deserialized.CustomSignedAssertionProviderName); + Assert.Equal(original.CustomSignedAssertionProviderData["MyCustomProviderData_Key"].ToString(), + deserialized.CustomSignedAssertionProviderData?["MyCustomProviderData_Key"].ToString()); + Assert.Equal(CredentialType.SignedAssertion, deserialized.CredentialType); + } + } +} +#endif