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>(); }
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)
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)); }
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)); }
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)); }