示例#1
0
        public async Task Signer()
        {
            var bytes   = Encoding.UTF8.GetBytes("signature");
            var handler = new MockMessageHandler()
            {
                Response = "discovered-service-account",
            };
            var factory = new MockHttpClientFactory(handler);
            var signer  = new IAMSigner(factory, GoogleCredential.FromAccessToken("token"));

            Assert.Equal("discovered-service-account", await signer.GetKeyIdAsync());
            Assert.Equal(1, handler.Calls);

            // should only fetch account once
            Assert.Equal("discovered-service-account", await signer.GetKeyIdAsync());
            Assert.Equal(1, handler.Calls);

            handler.Response = new IAMSigner.SignBlobResponse()
            {
                Signature = Convert.ToBase64String(bytes),
            };
            byte[] data      = Encoding.UTF8.GetBytes("Hello world");
            byte[] signature = await signer.SignDataAsync(data);

            Assert.Equal(bytes, signature);
            var req = NewtonsoftJsonSerializer.Instance.Deserialize <IAMSigner.SignBlobRequest>(
                handler.LastRequestBody);

            Assert.Equal(Convert.ToBase64String(data), req.BytesToSign);
            Assert.Equal(2, handler.Calls);
            Assert.Equal("Bearer token", handler.LastRequestHeaders.Authorization?.ToString());
        }
示例#2
0
        public async Task AccountDiscoveryError()
        {
            var bytes   = Encoding.UTF8.GetBytes("signature");
            var handler = new MockMessageHandler()
            {
                StatusCode = HttpStatusCode.InternalServerError,
            };
            var factory      = new MockHttpClientFactory(handler);
            var signer       = new IAMSigner(factory, GoogleCredential.FromAccessToken("token"));
            var errorMessage = "Failed to determine service account ID. Make sure to initialize the SDK "
                               + "with service account credentials or specify a service account "
                               + "ID with iam.serviceAccounts.signBlob permission. Please refer to "
                               + "https://firebase.google.com/docs/auth/admin/create-custom-tokens for "
                               + "more details on creating custom tokens.";

            var ex = await Assert.ThrowsAsync <InvalidOperationException>(
                async() => await signer.GetKeyIdAsync());

            Assert.Equal(1, handler.Calls);
            Assert.Equal(errorMessage, ex.Message);
            Assert.IsType <HttpRequestException>(ex.InnerException);

            ex = await Assert.ThrowsAsync <InvalidOperationException>(
                async() => await signer.GetKeyIdAsync());

            Assert.Equal(1, handler.Calls);
            Assert.Equal(errorMessage, ex.Message);
            Assert.IsType <HttpRequestException>(ex.InnerException);
        }
        public async Task AccountDiscoveryError()
        {
            var bytes   = Encoding.UTF8.GetBytes("signature");
            var handler = new MockMessageHandler()
            {
                StatusCode = HttpStatusCode.InternalServerError,
            };
            var factory = new MockHttpClientFactory(handler);
            var signer  = new IAMSigner(factory, GoogleCredential.FromAccessToken("token"));
            await Assert.ThrowsAsync <FirebaseException>(
                async() => await signer.GetKeyIdAsync());

            Assert.Equal(1, handler.Calls);
            await Assert.ThrowsAsync <FirebaseException>(
                async() => await signer.GetKeyIdAsync());

            Assert.Equal(1, handler.Calls);
        }