Skip to content

Commit fce8377

Browse files
Support oidc authentication (#105)
1 parent f97922a commit fce8377

File tree

5 files changed

+68
-0
lines changed

5 files changed

+68
-0
lines changed

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
44
</PropertyGroup>
55
<ItemGroup>
6+
<PackageVersion Include="Azure.Identity" Version="1.15.0" />
67
<PackageVersion Include="Moq" Version="4.20.72" />
78
<PackageVersion Include="Snapshooter.Xunit" Version="0.14.1" />
89
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />

src/MongoDB.Extensions.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Migration.Tests", "Migratio
4141
EndProject
4242
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Context.GuidSerializers.Tests", "Context.GuidSerializer.Tests\Context.GuidSerializers.Tests.csproj", "{2E5C44AC-9F56-462F-B0B7-25F5995F5B76}"
4343
EndProject
44+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Oidc", "Oidc\Oidc.csproj", "{A3740BF3-F10A-4F79-95EF-34FA870BCE7F}"
45+
EndProject
4446
Global
4547
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4648
Debug|Any CPU = Debug|Any CPU
@@ -99,6 +101,10 @@ Global
99101
{2E5C44AC-9F56-462F-B0B7-25F5995F5B76}.Debug|Any CPU.Build.0 = Debug|Any CPU
100102
{2E5C44AC-9F56-462F-B0B7-25F5995F5B76}.Release|Any CPU.ActiveCfg = Release|Any CPU
101103
{2E5C44AC-9F56-462F-B0B7-25F5995F5B76}.Release|Any CPU.Build.0 = Release|Any CPU
104+
{A3740BF3-F10A-4F79-95EF-34FA870BCE7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
105+
{A3740BF3-F10A-4F79-95EF-34FA870BCE7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
106+
{A3740BF3-F10A-4F79-95EF-34FA870BCE7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
107+
{A3740BF3-F10A-4F79-95EF-34FA870BCE7F}.Release|Any CPU.Build.0 = Release|Any CPU
102108
EndGlobalSection
103109
GlobalSection(SolutionProperties) = preSolution
104110
HideSolutionNode = FALSE
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using Azure.Core;
2+
using Azure.Identity;
3+
using MongoDB.Driver.Authentication.Oidc;
4+
5+
namespace Mongo.DB.Extensions.Context.Oidc;
6+
7+
internal class MongoOidcCallback : IOidcCallback
8+
{
9+
private readonly List<string> _scopes;
10+
11+
public MongoOidcCallback(List<string> scopes)
12+
{
13+
_scopes = scopes;
14+
}
15+
16+
public OidcAccessToken GetOidcAccessToken(OidcCallbackParameters parameters, CancellationToken cancellationToken)
17+
{
18+
var credential = new DefaultAzureCredential();
19+
20+
var accessToken = credential.GetToken(new TokenRequestContext(_scopes.ToArray())).Token;
21+
22+
return new(accessToken, expiresIn: null);
23+
}
24+
25+
public async Task<OidcAccessToken> GetOidcAccessTokenAsync(OidcCallbackParameters parameters, CancellationToken cancellationToken)
26+
{
27+
var credential = new DefaultAzureCredential();
28+
29+
var accessToken = await credential.GetTokenAsync(new TokenRequestContext(_scopes.ToArray()));
30+
31+
return new(accessToken.Token, expiresIn: null);
32+
}
33+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using MongoDB.Driver;
2+
3+
namespace Mongo.DB.Extensions.Context.Oidc;
4+
5+
public static class MongoClientSettingsExtensions
6+
{
7+
public static void AddOidcAuthentication(this MongoClientSettings mongoClientSettings, List<string> scopes)
8+
{
9+
mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MongoOidcCallback(scopes));
10+
}
11+
}

src/Oidc/Oidc.csproj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
<RootNamespace>Mongo.DB.Extensions.Context.Oidc</RootNamespace>
8+
<AssemblyName>Mongo.DB.Extensions.Context.Oidc</AssemblyName>
9+
<PackageId>Mongo.DB.Extensions.Context.Oidc</PackageId>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="Azure.Identity" />
14+
<PackageReference Include="MongoDB.Driver" />
15+
</ItemGroup>
16+
17+
</Project>

0 commit comments

Comments
 (0)