Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
a12f715
Proto for FIC+OIDC
jmprieur Feb 24, 2025
40e5a4e
Attempt to avoid blocking on WaitAsync()
jmprieur Feb 24, 2025
a2e0c31
Use credential ID to key CCA objects
bgavrilMS Feb 25, 2025
04579a5
Add credential ID to the key of the CCA dictionary
bgavrilMS Feb 25, 2025
ffc9ad8
Update to use semaphores
bgavrilMS Feb 25, 2025
60128c9
Update test to use separate app + TokenAcquisition to not use semaphores
bgavrilMS Feb 26, 2025
03ef613
Update test config with x-cloud setup
bgavrilMS Feb 26, 2025
f91691d
Finalize tests
bgavrilMS Feb 28, 2025
be7f993
Propose a fix for:
jmprieur Mar 2, 2025
b9740b6
Productize OIDC FIC
jmprieur Mar 2, 2025
465cfc2
Add back unit test
bgavrilMS Mar 3, 2025
1f7fc22
Update src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs
bgavrilMS Mar 3, 2025
dd51093
Merge branch 'master' into jmprieur/protoFicPlusOidc
jmprieur Mar 3, 2025
5bbff2b
More test fixes
bgavrilMS Mar 3, 2025
e2a6ee4
Merge branch 'jmprieur/protoFicPlusOidc' of https://github.com/AzureA…
bgavrilMS Mar 3, 2025
bcc2404
Ignore integration test on GH build
bgavrilMS Mar 4, 2025
7d7978f
Proto for FIC+OIDC
jmprieur Feb 24, 2025
e6d76c0
Attempt to avoid blocking on WaitAsync()
jmprieur Feb 24, 2025
9e506c5
Use credential ID to key CCA objects
bgavrilMS Feb 25, 2025
4f07d82
Add credential ID to the key of the CCA dictionary
bgavrilMS Feb 25, 2025
e13153f
Update to use semaphores
bgavrilMS Feb 25, 2025
dbc03c7
Update test to use separate app + TokenAcquisition to not use semaphores
bgavrilMS Feb 26, 2025
45eac69
Update test config with x-cloud setup
bgavrilMS Feb 26, 2025
342571d
Finalize tests
bgavrilMS Feb 28, 2025
cf57340
Propose a fix for:
jmprieur Mar 2, 2025
3d82084
Productize OIDC FIC
jmprieur Mar 2, 2025
139552d
Add back unit test
bgavrilMS Mar 3, 2025
f0d0ad0
Update src/Microsoft.Identity.Web.TokenAcquisition/TokenAcquisition.cs
bgavrilMS Mar 3, 2025
f140adf
More test fixes
bgavrilMS Mar 3, 2025
3fce434
Ignore integration test on GH build
bgavrilMS Mar 4, 2025
4deecc6
Fix test common project not running on GH action
bgavrilMS Mar 4, 2025
e6d2593
Merge branch 'jmprieur/protoFicPlusOidc' of https://github.com/AzureA…
bgavrilMS Mar 4, 2025
07729b0
Merge branch 'master' into jmprieur/protoFicPlusOidc
jmprieur Mar 4, 2025
293b5ae
Merge branch 'jmprieur/protoFicPlusOidc' of http://github.com/AzureAD…
jmprieur Mar 4, 2025
c30f84e
Try another fix for GH test build
bgavrilMS Mar 4, 2025
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
14 changes: 14 additions & 0 deletions Microsoft.Identity.Web.sln
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp", "tests\DevApps\
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "blazor", "blazor", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OidcIdpSignedAssertionProviderTests", "tests\E2E Tests\OidcIdPSignedAssertionProviderTests\OidcIdpSignedAssertionProviderTests.csproj", "{E927D215-A96C-626C-9A1A-CF99876FE7B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Identity.Web.OidcFIC", "src\Microsoft.Identity.Web.OidcFIC\Microsoft.Identity.Web.OidcFIC.csproj", "{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -369,6 +373,14 @@ Global
{4D67BE6A-79CD-42E7-8748-C909FCC394DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D67BE6A-79CD-42E7-8748-C909FCC394DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D67BE6A-79CD-42E7-8748-C909FCC394DF}.Release|Any CPU.Build.0 = Release|Any CPU
{E927D215-A96C-626C-9A1A-CF99876FE7B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E927D215-A96C-626C-9A1A-CF99876FE7B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E927D215-A96C-626C-9A1A-CF99876FE7B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E927D215-A96C-626C-9A1A-CF99876FE7B4}.Release|Any CPU.Build.0 = Release|Any CPU
{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -440,6 +452,8 @@ Global
{A390650C-BCE1-4CB3-8C97-9EF9CFF5B7C5} = {45B20A78-91F8-4DD2-B9AD-F12D3A93536C}
{4D67BE6A-79CD-42E7-8748-C909FCC394DF} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
{02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {7786D2DD-9EE4-42E1-B587-740A2E15C41D}
{E927D215-A96C-626C-9A1A-CF99876FE7B4} = {45B20A78-91F8-4DD2-B9AD-F12D3A93536C}
{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A} = {1DDE1AAC-5AE6-4725-94B6-A26C58D3423F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {104367F1-CE75-4F40-B32F-F14853973187}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>

<Title>Microsoft Identity Web Token Cross Cloud Federation Identity Credential (FIC) support</Title>
<Product>Microsoft Identity Web Cross Cloud FIC</Product>
<Description>Implementation for a Cloud Federation Identity Credential (FIC) credential provider.</Description>
<ProjectGuid>{8DA7A2C6-00D4-4CF1-8145-448D7B7B4E5A}</ProjectGuid>
<PackageReadmeFile>README.md</PackageReadmeFile>

<!-- Until it releases-->
<EnablePackageValidation>false</EnablePackageValidation>
</PropertyGroup>

<ItemGroup>
<None Include="..\..\README.md">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Microsoft.Identity.Web.TokenAcquisition\Microsoft.Identity.Web.TokenAcquisition.csproj" />
</ItemGroup>

<ItemGroup>
<AdditionalFiles Include="PublicAPI/$(TargetFramework)/PublicAPI.Shipped.txt" />
<AdditionalFiles Include="PublicAPI/$(TargetFramework)/PublicAPI.Unshipped.txt" />
<AdditionalFiles Include="PublicAPI/$(TargetFramework)/InternalAPI.Shipped.txt" />
<AdditionalFiles Include="PublicAPI/$(TargetFramework)/InternalAPI.Unshipped.txt" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web.OidcFic;

namespace Microsoft.Extensions.DependencyInjection
{
/// <summary>
/// Extension class to add OIDC FIC signed assertion provider to the service collection
///
/// </summary>
public static class OidcFicSignedAssertionProviderExtensions
{
/// <summary>
/// Adds OIDC FIC signed assertion provider to the service collection
/// </summary>
/// <param name="services">service collection</param>
/// <returns>the service collection for chaining.</returns>
public static IServiceCollection AddOidcFic(this IServiceCollection services)
{
services.AddSingleton<ICustomSignedAssertionProvider, OidcIdpSignedAssertionLoader>();
return services;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.Identity.Abstractions;

namespace Microsoft.Identity.Web.OidcFic
{
internal class OidcIdpSignedAssertionLoader : ICustomSignedAssertionProvider
{
private readonly ILogger<OidcIdpSignedAssertionLoader> _logger;
private readonly IOptionsMonitor<MicrosoftIdentityApplicationOptions> _options;
private readonly IConfiguration _configuration;
private readonly ITokenAcquirerFactory _tokenAcquirerFactory;

public OidcIdpSignedAssertionLoader(ILogger<OidcIdpSignedAssertionLoader> logger,
IOptionsMonitor<MicrosoftIdentityApplicationOptions> options,
IConfiguration configuration,
ITokenAcquirerFactory tokenAcquirerFactory)
{
_logger = logger;
_options = options;
_configuration = configuration;
_tokenAcquirerFactory = tokenAcquirerFactory;
}

public CredentialSource CredentialSource => CredentialSource.CustomSignedAssertion;

public string Name => "OidcIdpSignedAssertion";


public async Task LoadIfNeededAsync(CredentialDescription credentialDescription, CredentialSourceLoaderParameters? parameters = null)
{
OidcIdpSignedAssertionProvider? signedAssertion = credentialDescription.CachedValue as OidcIdpSignedAssertionProvider;
if (credentialDescription.CachedValue == null)
{
if (credentialDescription.CustomSignedAssertionProviderData == null)
{
if (_logger != null)
{
_logger.LogError(42, "CustomSignedAssertionProviderData is null");
}
throw new InvalidOperationException("CustomSignedAssertionProviderData is null");
}

string? sectionName = credentialDescription.CustomSignedAssertionProviderData["ConfigurationSection"] as string;
if (sectionName == null)
{
if (_logger != null)
{
_logger.LogError(42, "ConfigurationSection is null");
}
throw new InvalidOperationException("ConfigurationSection is null");
}

MicrosoftIdentityApplicationOptions microsoftIdentityApplicationOptions = _options.Get(sectionName);

if (string.IsNullOrEmpty(microsoftIdentityApplicationOptions.Instance) && microsoftIdentityApplicationOptions.Authority == "//v2.0")
{
_configuration.GetSection(sectionName).Bind(microsoftIdentityApplicationOptions);
}

signedAssertion = new OidcIdpSignedAssertionProvider(_tokenAcquirerFactory, microsoftIdentityApplicationOptions, credentialDescription.TokenExchangeUrl);
}

try
{
// Try to get a signed assertion, and if it fails, move to the next credentials
_ = await signedAssertion!.GetSignedAssertionAsync(null);
credentialDescription.CachedValue = signedAssertion;
}
catch (Exception ex)
{
if (_logger != null)
{
_logger.LogError(42, "Failed to get signed assertion from {ProviderName}. exception occurred: {Message}. Setting skip to true.", credentialDescription.CustomSignedAssertionProviderName, ex.Message);
}
credentialDescription.Skip = true;
throw;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Client;
using Microsoft.Identity.Web;

namespace Microsoft.Identity.Web.OidcFic
{
internal class OidcIdpSignedAssertionProvider : ClientAssertionProviderBase
{
private ITokenAcquirer? _tokenAcquirer = null;
private readonly ITokenAcquirerFactory _tokenAcquirerFactory;
private readonly MicrosoftIdentityApplicationOptions _options;
private readonly string? _tokenExchangeUrl;

public OidcIdpSignedAssertionProvider(ITokenAcquirerFactory tokenAcquirerFactory, MicrosoftIdentityApplicationOptions options, string? tokenExchangeUrl)
{
_tokenAcquirerFactory = tokenAcquirerFactory;
_options = options;
_tokenExchangeUrl = tokenExchangeUrl;
}

protected override async Task<ClientAssertion> GetClientAssertionAsync(AssertionRequestOptions? assertionRequestOptions)
{
_tokenAcquirer ??= _tokenAcquirerFactory.GetTokenAcquirer(_options);

string tokenExchangeUrl = _tokenExchangeUrl ?? "api://AzureADTokenExchange";

AcquireTokenResult result = await _tokenAcquirer.GetTokenForAppAsync(tokenExchangeUrl + "/.default");
ClientAssertion clientAssertion;
if (result != null)
{
clientAssertion = new ClientAssertion(result.AccessToken!, result.ExpiresOn);
}
else
{
clientAssertion = null!;
}
return clientAssertion;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#nullable enable
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.CredentialSource.get -> Microsoft.Identity.Abstractions.CredentialSource
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.LoadIfNeededAsync(Microsoft.Identity.Abstractions.CredentialDescription! credentialDescription, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.Name.get -> string!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.OidcIdpSignedAssertionLoader(Microsoft.Extensions.Logging.ILogger<Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader!>! logger, Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions!>! options, Microsoft.Extensions.Configuration.IConfiguration! configuration, Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory) -> void
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.OidcIdpSignedAssertionProvider(Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory, Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions! options, string? tokenExchangeUrl) -> void
override Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.GetClientAssertionAsync(Microsoft.Identity.Client.AssertionRequestOptions? assertionRequestOptions) -> System.Threading.Tasks.Task<Microsoft.Identity.Web.ClientAssertion!>!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#nullable enable
Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions
static Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions.AddOidcFic(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#nullable enable
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.CredentialSource.get -> Microsoft.Identity.Abstractions.CredentialSource
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.LoadIfNeededAsync(Microsoft.Identity.Abstractions.CredentialDescription! credentialDescription, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.Name.get -> string!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.OidcIdpSignedAssertionLoader(Microsoft.Extensions.Logging.ILogger<Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader!>! logger, Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions!>! options, Microsoft.Extensions.Configuration.IConfiguration! configuration, Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory) -> void
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.OidcIdpSignedAssertionProvider(Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory, Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions! options, string? tokenExchangeUrl) -> void
override Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.GetClientAssertionAsync(Microsoft.Identity.Client.AssertionRequestOptions? assertionRequestOptions) -> System.Threading.Tasks.Task<Microsoft.Identity.Web.ClientAssertion!>!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#nullable enable
Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions
static Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions.AddOidcFic(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#nullable enable
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.CredentialSource.get -> Microsoft.Identity.Abstractions.CredentialSource
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.LoadIfNeededAsync(Microsoft.Identity.Abstractions.CredentialDescription! credentialDescription, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.Name.get -> string!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.OidcIdpSignedAssertionLoader(Microsoft.Extensions.Logging.ILogger<Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader!>! logger, Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions!>! options, Microsoft.Extensions.Configuration.IConfiguration! configuration, Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory) -> void
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.OidcIdpSignedAssertionProvider(Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory, Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions! options, string? tokenExchangeUrl) -> void
override Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.GetClientAssertionAsync(Microsoft.Identity.Client.AssertionRequestOptions? assertionRequestOptions) -> System.Threading.Tasks.Task<Microsoft.Identity.Web.ClientAssertion!>!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#nullable enable
Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions
static Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions.AddOidcFic(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#nullable enable
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.CredentialSource.get -> Microsoft.Identity.Abstractions.CredentialSource
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.LoadIfNeededAsync(Microsoft.Identity.Abstractions.CredentialDescription! credentialDescription, Microsoft.Identity.Abstractions.CredentialSourceLoaderParameters? parameters = null) -> System.Threading.Tasks.Task!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.Name.get -> string!
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader.OidcIdpSignedAssertionLoader(Microsoft.Extensions.Logging.ILogger<Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionLoader!>! logger, Microsoft.Extensions.Options.IOptionsMonitor<Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions!>! options, Microsoft.Extensions.Configuration.IConfiguration! configuration, Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory) -> void
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider
Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.OidcIdpSignedAssertionProvider(Microsoft.Identity.Abstractions.ITokenAcquirerFactory! tokenAcquirerFactory, Microsoft.Identity.Abstractions.MicrosoftIdentityApplicationOptions! options, string? tokenExchangeUrl) -> void
override Microsoft.Identity.Web.OidcFic.OidcIdpSignedAssertionProvider.GetClientAssertionAsync(Microsoft.Identity.Client.AssertionRequestOptions? assertionRequestOptions) -> System.Threading.Tasks.Task<Microsoft.Identity.Web.ClientAssertion!>!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#nullable enable
Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions
static Microsoft.Extensions.DependencyInjection.OidcFicSignedAssertionProviderExtensions.AddOidcFic(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Loading
Loading