Skip to content

Commit 3866ec0

Browse files
authored
feat(auth): Adding tenant-aware token verification support (#230)
* feat(auth): Adding tenant-aware token verification support * feat(auth): Moved ID token verify methods to AbstractFirebaseAuth * fix: Cleaned up the unit tests TestConfig API
1 parent 0d8fbb8 commit 3866ec0

12 files changed

+619
-262
lines changed

FirebaseAdmin/FirebaseAdmin.Tests/Auth/FirebaseAuthTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public void NoTenantId()
8383
FirebaseAuth auth = FirebaseAuth.DefaultInstance;
8484

8585
Assert.Null(auth.TokenFactory.TenantId);
86+
Assert.Null(auth.IdTokenVerifier.TenantId);
8687
Assert.Null(auth.UserManager.TenantId);
8788
}
8889

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

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,26 @@
1313
// limitations under the License.
1414

1515
using System;
16+
using System.Collections.Generic;
1617
using Google.Apis.Auth.OAuth2;
1718
using Xunit;
1819

1920
namespace FirebaseAdmin.Auth.Jwt.Tests
2021
{
2122
public class FirebaseTokenVerifierTest : IDisposable
2223
{
24+
public static readonly IEnumerable<object[]> InvalidStrings = new List<object[]>
25+
{
26+
new object[] { null },
27+
new object[] { string.Empty },
28+
};
29+
2330
private static readonly GoogleCredential MockCredential =
2431
GoogleCredential.FromAccessToken("test-token");
2532

33+
private static readonly IPublicKeySource KeySource = new FileSystemPublicKeySource(
34+
"./resources/public_cert.pem");
35+
2636
[Fact]
2737
public void NoProjectId()
2838
{
@@ -85,6 +95,85 @@ public void ProjectIdFromEnvironment()
8595
}
8696
}
8797

98+
[Theory]
99+
[MemberData(nameof(InvalidStrings))]
100+
public void InvalidProjectId(string projectId)
101+
{
102+
var args = FirebaseTokenVerifierArgs.ForIdTokens(projectId, KeySource);
103+
104+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
105+
}
106+
107+
[Fact]
108+
public void NullKeySource()
109+
{
110+
var args = FirebaseTokenVerifierArgs.ForIdTokens("test-project", null);
111+
112+
Assert.Throws<ArgumentNullException>(() => new FirebaseTokenVerifier(args));
113+
}
114+
115+
[Theory]
116+
[MemberData(nameof(InvalidStrings))]
117+
public void InvalidShortName(string shortName)
118+
{
119+
var args = FirebaseTokenVerifierArgs.ForIdTokens("test-project", KeySource);
120+
args.ShortName = shortName;
121+
122+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
123+
}
124+
125+
[Theory]
126+
[MemberData(nameof(InvalidStrings))]
127+
public void InvalidIssuer(string issuer)
128+
{
129+
var args = FirebaseTokenVerifierArgs.ForIdTokens("test-project", KeySource);
130+
args.Issuer = issuer;
131+
132+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
133+
}
134+
135+
[Theory]
136+
[MemberData(nameof(InvalidStrings))]
137+
public void InvalidOperation(string operation)
138+
{
139+
var args = FirebaseTokenVerifierArgs.ForIdTokens("test-project", KeySource);
140+
args.Operation = operation;
141+
142+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
143+
}
144+
145+
[Theory]
146+
[MemberData(nameof(InvalidStrings))]
147+
public void InvalidUrl(string url)
148+
{
149+
var args = FirebaseTokenVerifierArgs.ForIdTokens("test-project", KeySource);
150+
args.Url = url;
151+
152+
Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
153+
}
154+
155+
[Fact]
156+
public void TenantId()
157+
{
158+
var args = FirebaseTokenVerifierArgs.ForIdTokens(
159+
"test-project", KeySource, tenantId: "test-tenant");
160+
161+
var verifier = new FirebaseTokenVerifier(args);
162+
163+
Assert.Equal("test-tenant", verifier.TenantId);
164+
}
165+
166+
[Fact]
167+
public void EmptyTenantId()
168+
{
169+
var args = FirebaseTokenVerifierArgs.ForIdTokens(
170+
"test-project", KeySource, tenantId: string.Empty);
171+
172+
var ex = Assert.Throws<ArgumentException>(() => new FirebaseTokenVerifier(args));
173+
174+
Assert.Equal("Tenant ID must not be empty.", ex.Message);
175+
}
176+
88177
public void Dispose()
89178
{
90179
FirebaseApp.DeleteAll();

0 commit comments

Comments
 (0)