Skip to content

Commit 38545b9

Browse files
authored
chore: Introducing FirebaseAdmin.Auth.Jwt namespace for internal APIs (#226)
* chore: Introducing FirebaseAdmin.Auth.Jwt namespace for internal APIs * chore: Moving IPublicKeySource and related classes to Jwt
1 parent 6cf48b2 commit 38545b9

26 files changed

+77
-91
lines changed

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseAuthTest.cs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using System.Text;
2121
using System.Threading;
2222
using System.Threading.Tasks;
23+
using FirebaseAdmin.Auth.Jwt;
2324
using Google.Apis.Auth.OAuth2;
2425
using Xunit;
2526

@@ -125,31 +126,6 @@ public async Task CreateCustomTokenInvalidCredential()
125126
Assert.Equal(errorMessage, ex.Message);
126127
}
127128

128-
[Fact]
129-
public async Task VerifyIdTokenNoProjectId()
130-
{
131-
FirebaseApp.Create(new AppOptions() { Credential = MockCredential });
132-
var idToken = await IdTokenVerificationTest.CreateTestTokenAsync();
133-
await Assert.ThrowsAsync<ArgumentException>(
134-
async () => await FirebaseAuth.DefaultInstance.VerifyIdTokenAsync(idToken));
135-
}
136-
137-
[Fact]
138-
public async Task VerifyIdTokenCancel()
139-
{
140-
FirebaseApp.Create(new AppOptions()
141-
{
142-
Credential = MockCredential,
143-
ProjectId = "test-project",
144-
});
145-
var canceller = new CancellationTokenSource();
146-
canceller.Cancel();
147-
var idToken = await IdTokenVerificationTest.CreateTestTokenAsync();
148-
await Assert.ThrowsAnyAsync<OperationCanceledException>(
149-
async () => await FirebaseAuth.DefaultInstance.VerifyIdTokenAsync(
150-
idToken, canceller.Token));
151-
}
152-
153129
[Fact]
154130
public async Task SetCustomUserClaimsNoProjectId()
155131
{

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseUserManagerTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System.Net.Http;
2020
using System.Net.Http.Headers;
2121
using System.Threading.Tasks;
22+
using FirebaseAdmin.Auth.Jwt;
2223
using FirebaseAdmin.Tests;
2324
using FirebaseAdmin.Util;
2425
using Google.Apis.Auth.OAuth2;

FirebaseAdmin/FirebaseAdmin.Tests/Auth/ImportUserRecordArgsTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Collections.Generic;
1717
using System.Linq;
1818
using System.Text;
19+
using FirebaseAdmin.Auth.Jwt;
1920
using Google.Apis.Json;
2021
using Newtonsoft.Json;
2122
using Xunit;

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseTokenFactoryTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/FirebaseTokenFactoryTest.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,14 @@
1414

1515
using System;
1616
using System.Collections.Generic;
17-
using System.IO;
18-
using System.Security.Cryptography;
19-
using System.Security.Cryptography.X509Certificates;
2017
using System.Text;
2118
using System.Threading;
2219
using System.Threading.Tasks;
23-
using FirebaseAdmin.Auth;
2420
using FirebaseAdmin.Tests;
2521
using Google.Apis.Auth;
26-
using Google.Apis.Util;
2722
using Xunit;
2823

29-
namespace FirebaseAdmin.Auth.Tests
24+
namespace FirebaseAdmin.Auth.Jwt.Tests
3025
{
3126
public class FirebaseTokenFactoryTest
3227
{

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseTokenVerifierTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/FirebaseTokenVerifierTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
using Google.Apis.Auth.OAuth2;
1717
using Xunit;
1818

19-
namespace FirebaseAdmin.Auth.Tests
19+
namespace FirebaseAdmin.Auth.Jwt.Tests
2020
{
2121
public class FirebaseTokenVerifierTest : IDisposable
2222
{

FirebaseAdmin/FirebaseAdmin.Tests/Auth/HttpPublicKeySourceTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/HttpPublicKeySourceTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
using FirebaseAdmin.Tests;
2222
using Xunit;
2323

24-
namespace FirebaseAdmin.Auth.Tests
24+
namespace FirebaseAdmin.Auth.Jwt.Tests
2525
{
2626
public class HttpPublicKeySourceTest
2727
{

FirebaseAdmin/FirebaseAdmin.Tests/Auth/IAMSignerTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/IAMSignerTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
using Google.Apis.Json;
2525
using Xunit;
2626

27-
namespace FirebaseAdmin.Auth.Tests
27+
namespace FirebaseAdmin.Auth.Jwt.Tests
2828
{
2929
public class IAMSignerTest
3030
{

FirebaseAdmin/FirebaseAdmin.Tests/Auth/IdTokenVerificationTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/IdTokenVerificationTest.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
using Google.Apis.Util;
2929
using Xunit;
3030

31-
namespace FirebaseAdmin.Auth.Tests
31+
namespace FirebaseAdmin.Auth.Jwt.Tests
3232
{
3333
public class IdTokenVerificationTest
3434
{
@@ -44,6 +44,14 @@ public class IdTokenVerificationTest
4444
private static readonly GoogleCredential MockCredential =
4545
GoogleCredential.FromAccessToken("test-token");
4646

47+
[Fact]
48+
public void NoProjectId()
49+
{
50+
var args = FirebaseTokenVerifierArgs.ForIdTokens(null, KeySource, Clock);
51+
52+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
53+
}
54+
4755
[Fact]
4856
public async Task ValidToken()
4957
{
@@ -359,6 +367,18 @@ public async Task CheckRevokedError()
359367
Assert.Equal(1, handler.Calls);
360368
}
361369

370+
[Fact]
371+
public async Task VerifyIdTokenCancel()
372+
{
373+
var auth = this.CreateFirebaseAuth();
374+
var canceller = new CancellationTokenSource();
375+
canceller.Cancel();
376+
var idToken = await IdTokenVerificationTest.CreateTestTokenAsync();
377+
378+
await Assert.ThrowsAnyAsync<OperationCanceledException>(
379+
() => auth.VerifyIdTokenAsync(idToken, canceller.Token));
380+
}
381+
362382
/// <summary>
363383
/// Creates a mock ID token for testing purposes. By default the created token has an issue
364384
/// time 10 minutes ago, and an expirty time 50 minutes into the future. All header and
@@ -458,6 +478,7 @@ public FileSystemPublicKeySource(string file)
458478
public Task<IReadOnlyList<PublicKey>> GetPublicKeysAsync(
459479
CancellationToken cancellationToken)
460480
{
481+
cancellationToken.ThrowIfCancellationRequested();
461482
return Task.FromResult(this.rsa);
462483
}
463484
}

FirebaseAdmin/FirebaseAdmin.Tests/Auth/ServiceAccountSignerTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/ServiceAccountSignerTest.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@
1818
using System.Security.Cryptography.X509Certificates;
1919
using System.Text;
2020
using System.Threading.Tasks;
21-
using FirebaseAdmin.Auth;
2221
using Google.Apis.Auth.OAuth2;
2322
using Xunit;
2423

25-
namespace FirebaseAdmin.Auth.Tests
24+
namespace FirebaseAdmin.Auth.Jwt.Tests
2625
{
2726
public class ServiceAccountSignerTest
2827
{

FirebaseAdmin/FirebaseAdmin.Tests/Auth/SessionCookieVerificationTest.cs renamed to FirebaseAdmin/FirebaseAdmin.Tests/Auth/Jwt/SessionCookieVerificationTest.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
using Google.Apis.Util;
2424
using Xunit;
2525

26-
namespace FirebaseAdmin.Auth.Tests
26+
namespace FirebaseAdmin.Auth.Jwt.Tests
2727
{
2828
public class SessionCookieVerificationTest
2929
{
@@ -36,6 +36,14 @@ public class SessionCookieVerificationTest
3636

3737
private static readonly ISigner Signer = IdTokenVerificationTest.CreateTestSigner();
3838

39+
[Fact]
40+
public void NoProjectId()
41+
{
42+
var args = FirebaseTokenVerifierArgs.ForSessionCookies(null, KeySource, Clock);
43+
44+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
45+
}
46+
3947
[Fact]
4048
public async Task ValidSessionCookie()
4149
{

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseAuth.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Collections.Generic;
1717
using System.Threading;
1818
using System.Threading.Tasks;
19+
using FirebaseAdmin.Auth.Jwt;
1920
using FirebaseAdmin.Auth.Multitenancy;
2021
using FirebaseAdmin.Auth.Providers;
2122
using Google.Api.Gax;

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseToken.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
using System.Collections.Generic;
16+
using Newtonsoft.Json;
1617

1718
namespace FirebaseAdmin.Auth
1819
{
@@ -22,7 +23,7 @@ namespace FirebaseAdmin.Auth
2223
/// </summary>
2324
public sealed class FirebaseToken
2425
{
25-
internal FirebaseToken(FirebaseTokenArgs args)
26+
internal FirebaseToken(Args args)
2627
{
2728
this.Issuer = args.Issuer;
2829
this.Subject = args.Subject;
@@ -71,5 +72,26 @@ internal FirebaseToken(FirebaseTokenArgs args)
7172
/// access custom claims of the token.
7273
/// </summary>
7374
public IReadOnlyDictionary<string, object> Claims { get; private set; }
75+
76+
internal sealed class Args
77+
{
78+
[JsonProperty("iss")]
79+
public string Issuer { get; set; }
80+
81+
[JsonProperty("sub")]
82+
public string Subject { get; set; }
83+
84+
[JsonProperty("aud")]
85+
public string Audience { get; set; }
86+
87+
[JsonProperty("exp")]
88+
public long ExpirationTimeSeconds { get; set; }
89+
90+
[JsonProperty("iat")]
91+
public long IssuedAtTimeSeconds { get; set; }
92+
93+
[JsonIgnore]
94+
public IReadOnlyDictionary<string, object> Claims { get; set; }
95+
}
7496
}
7597
}

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenArgs.cs

Lines changed: 0 additions & 40 deletions
This file was deleted.

FirebaseAdmin/FirebaseAdmin/Auth/ImportUserRecordArgs.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using System;
1616
using System.Collections.Generic;
1717
using System.Linq;
18+
using FirebaseAdmin.Auth.Jwt;
1819
using Newtonsoft.Json;
1920

2021
namespace FirebaseAdmin.Auth

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenFactory.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/FirebaseTokenFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"3003684e85e61cf15f13150008c81f0b75a252673028e530ea95d0c581378da8c6846526ab9597" +
2828
"4c6d0bc66d2462b51af69968a0e25114bde8811e0d6ee1dc22d4a59eee6a8bba4712cba839652f" +
2929
"badddb9c")]
30-
namespace FirebaseAdmin.Auth
30+
namespace FirebaseAdmin.Auth.Jwt
3131
{
3232
/// <summary>
3333
/// A helper class that creates Firebase custom tokens.

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenVerifier.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/FirebaseTokenVerifier.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
using Google.Apis.Http;
2626
using Google.Apis.Util;
2727

28-
namespace FirebaseAdmin.Auth
28+
namespace FirebaseAdmin.Auth.Jwt
2929
{
3030
/// <summary>
3131
/// A helper class that can be used to verify signed Firebase tokens (e.g. ID tokens).
@@ -127,7 +127,7 @@ internal async Task<FirebaseToken> VerifyTokenAsync(
127127
}
128128

129129
var header = JwtUtils.Decode<JsonWebSignature.Header>(segments[0]);
130-
var payload = JwtUtils.Decode<FirebaseTokenArgs>(segments[1]);
130+
var payload = JwtUtils.Decode<FirebaseToken.Args>(segments[1]);
131131
var projectIdMessage = $"Make sure the {this.shortName} comes from the same Firebase "
132132
+ "project as the credential used to initialize this SDK.";
133133
var verifyTokenMessage = $"See {this.url} for details on how to retrieve a value "

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseTokenVerifierArgs.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/FirebaseTokenVerifierArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
using Google.Apis.Util;
1616

17-
namespace FirebaseAdmin.Auth
17+
namespace FirebaseAdmin.Auth.Jwt
1818
{
1919
internal sealed class FirebaseTokenVerifierArgs
2020
{

FirebaseAdmin/FirebaseAdmin/Auth/FixedAccountIAMSigner.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/FixedAccountIAMSigner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
using Google.Apis.Http;
2020
using Google.Apis.Util;
2121

22-
namespace FirebaseAdmin.Auth
22+
namespace FirebaseAdmin.Auth.Jwt
2323
{
2424
/// <summary>
2525
/// An <see cref="ISigner"/> implementation that uses the IAM service to sign data. Unlike

FirebaseAdmin/FirebaseAdmin/Auth/HttpPublicKeySource.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/HttpPublicKeySource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#error Unsupported target
3333
#endif
3434

35-
namespace FirebaseAdmin.Auth
35+
namespace FirebaseAdmin.Auth.Jwt
3636
{
3737
/// <summary>
3838
/// An <see cref="IPublicKeySource"/> implementation that retrieves public keys from a remote

FirebaseAdmin/FirebaseAdmin/Auth/IAMSigner.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/IAMSigner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
using Google.Apis.Http;
2222
using Google.Apis.Json;
2323

24-
namespace FirebaseAdmin.Auth
24+
namespace FirebaseAdmin.Auth.Jwt
2525
{
2626
/// <summary>
2727
/// An <see cref="ISigner"/> implementation that uses the

FirebaseAdmin/FirebaseAdmin/Auth/IPublicKeySource.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/IPublicKeySource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
using System.Threading;
1717
using System.Threading.Tasks;
1818

19-
namespace FirebaseAdmin.Auth
19+
namespace FirebaseAdmin.Auth.Jwt
2020
{
2121
/// <summary>
2222
/// An object that can be used to retrieve a set of RSA public keys for verifying signatures.

FirebaseAdmin/FirebaseAdmin/Auth/ISigner.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/ISigner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
using System.Threading;
1717
using System.Threading.Tasks;
1818

19-
namespace FirebaseAdmin.Auth
19+
namespace FirebaseAdmin.Auth.Jwt
2020
{
2121
/// <summary>
2222
/// Represents an object can be used to cryptographically sign data. Mainly used for signing

FirebaseAdmin/FirebaseAdmin/Auth/JwtUtils.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/JwtUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
using System.Threading.Tasks;
1919
using Google.Apis.Json;
2020

21-
namespace FirebaseAdmin.Auth
21+
namespace FirebaseAdmin.Auth.Jwt
2222
{
2323
/// <summary>
2424
/// A collection of utilities for encoding and decoding JWTs.

FirebaseAdmin/FirebaseAdmin/Auth/PublicKey.cs renamed to FirebaseAdmin/FirebaseAdmin/Auth/Jwt/PublicKey.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#error Unsupported target
2121
#endif
2222

23-
namespace FirebaseAdmin.Auth
23+
namespace FirebaseAdmin.Auth.Jwt
2424
{
2525
/// <summary>
2626
/// Represents an RSA public key, which can be used to verify signatures.

0 commit comments

Comments
 (0)