Exemple #1
0
        public async Task IssueNewToken_RequiredClaimsPresentAndIssueRejected_ReturnsConflictResponse()
        {
            //Arrange
            var tokenId = Guid.NewGuid();
            var request = new AnonymousTokenRequest();
            var user    = new ClaimsPrincipal(new ClaimsIdentity(new[]
            {
                new Claim(JwtClaimTypes.JwtId, tokenId.ToString()),
                new Claim(JwtClaimTypes.Expiration, DateTimeOffset.Now.ToUnixTimeSeconds().ToString())
            }));

            var automocker = new AutoMocker();

            automocker.Setup <IMediator, Task <Option <AnonymousTokenResponse, string> > >(x => x.Send(
                                                                                               It.IsAny <IssueAnonymousToken.Command>(),
                                                                                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(Option.None <AnonymousTokenResponse, string>("Rejected."));

            var target = automocker.CreateInstance <AnonymousTokensController>().SetUserForContext(user);

            //Act
            var result = await target.IssueNewToken(request);

            result.Result.Should().BeOfType <ConflictObjectResult>();
        }
Exemple #2
0
        public async Task <ActionResult <AnonymousTokenResponse> > IssueNewToken(AnonymousTokenRequest request)
        {
            var jwtTokenId = User.Claims
                             .FirstOrNone(x => x.Type == JwtClaimTypes.JwtId)
                             .Map(x => x.Value)
                             .ValueOr(() => throw new Exception($"Required claim {JwtClaimTypes.JwtId} was not found"));

            var jwtTokenExpiry = User.Claims
                                 .FirstOrNone(x => x.Type == JwtClaimTypes.Expiration)
                                 .FlatMap(x => int.TryParse(x.Value, out var number)
                    ? DateTimeOffset.FromUnixTimeSeconds(number).UtcDateTime.Some()
                    : default)
Exemple #3
0
        public void IssueNewToken_JwtTokenIdClaimMissing_ThrowsException()
        {
            //Arrange
            var request = new AnonymousTokenRequest();
            var user    = new ClaimsPrincipal(new ClaimsIdentity(new []
            {
                new Claim(JwtClaimTypes.Expiration, DateTimeOffset.Now.ToUnixTimeSeconds().ToString())
            }));

            var automocker = new AutoMocker();

            var target = automocker.CreateInstance <AnonymousTokensController>().SetUserForContext(user);

            //Act/Assert
            Assert.ThrowsAsync <Exception>(() => target.IssueNewToken(request));
        }
Exemple #4
0
        public void IssueNewToken_JwtTokenIssuedAtClaimMissing_ThrowsException()
        {
            //Arrange
            var tokenId = Guid.NewGuid();
            var request = new AnonymousTokenRequest();
            var user    = new ClaimsPrincipal(new ClaimsIdentity(new[]
            {
                new Claim(JwtClaimTypes.JwtId, tokenId.ToString()),
            }));

            var automocker = new AutoMocker();

            var target = automocker.CreateInstance <AnonymousTokensController>().SetUserForContext(user);

            //Act/Assert
            Assert.ThrowsAsync <Exception>(() => target.IssueNewToken(request));
        }
Exemple #5
0
            private async Task <AnonymousTokenResponse> CreateAnonymousTokenForRequestAsync(AnonymousTokenRequest request)
            {
                var signingKeyPair = await _keyStore.GetActiveSigningKeyPair();

                var privateKey  = signingKeyPair.PrivateKey;
                var publicKey   = signingKeyPair.PublicKey;
                var maskedPoint = signingKeyPair.EcParameters.Curve.DecodePoint(Convert.FromBase64String(request.MaskedPoint));

                var token          = _tokenGenerator.GenerateToken(privateKey, publicKey, signingKeyPair.EcParameters, maskedPoint);
                var signedPoint    = token.Q;
                var proofChallenge = token.c;
                var proofResponse  = token.z;

                return(new AnonymousTokenResponse(signingKeyPair.Kid, signedPoint, proofChallenge, proofResponse));
            }