Esempio n. 1
0
        public static ResponseToken GenerateToken(RefreshTokenBase source, string key, int?expires = null, string issuer = null, string audience = null, DateTime?notBefore = null)
        {
            var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
            var creds = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha512);

            DateTime?expiresDate = null;

            if (expires != null)
            {
                expiresDate = DateTime.Now.AddSeconds((int)expires);
            }

            var token = new JwtSecurityToken(issuer,
                                             audience,
                                             claims: GenerateClaims(source, source.GetType()),
                                             expires: expiresDate,
                                             signingCredentials: creds);

            var response = new ResponseToken
            {
                AccessToken  = new JwtSecurityTokenHandler().WriteToken(token),
                TokenType    = "bearer",
                ExpiresIn    = expires.ToString(),
                RefreshToken = source.RefreshToken
            };

            return(response);
        }
 static InMemoryTokenRepository()
 {
     RefreshTokenRepo["refresh"] = new RefreshTokenBase
     {
         ClientId = "12345",
         Scope    = new string[] { "create", "view", "delete" },
         Token    = "refresh"
     };
 }
Esempio n. 3
0
        public void TestExchangingRefreshTokenForWrongClient()
        {
            ClientBase client = new ClientBase {
                ClientId = "id", ClientSecret = "secret"
            };

            TokenContext context = new TokenContext
            {
                RefreshToken = "refresh_token",
                Client       = new ClientBase {
                    ClientId = "id"
                },
                ResourceOwnerUsername = "******"
            };
            RefreshTokenBase refreshToken = new RefreshTokenBase
            {
                ClientId = "123",
                Scope    = new string[] { "create", "delete" },
                Token    = "refresh_token"
            };

            Mock <IClientService> mckClientService = new Mock <IClientService>();

            mckClientService.Setup(x => x.AuthenticateClient(context)).Returns(true);
            mckClientService.Setup(x => x.FindClient("id")).Returns(client);

            Mock <ITokenService> mckTokenService = new Mock <ITokenService>();

            mckTokenService.Setup(x => x.FindRefreshToken("refresh_token")).Returns(refreshToken);

            Mock <IServiceFactory> mckFactory = new Mock <IServiceFactory>();

            mckFactory.SetupGet(x => x.ClientService).Returns(mckClientService.Object);
            mckFactory.SetupGet(x => x.TokenService).Returns(mckTokenService.Object);

            RefreshTokenProcessor processor = new RefreshTokenProcessor(mckFactory.Object);

            try
            {
                processor.Process(context);
                Assert.Fail("no exception trhown");
            }
            catch (OAuthErrorResponseException <IOAuthContext> x)
            {
                Assert.AreEqual(Parameters.ErrorParameters.ErrorValues.InvalidClient, x.Error);
            }
            catch (Exception x)
            {
                Assert.Fail("unexpected exception: " + x.Message);
            }

            mckFactory.VerifyAll();
            mckClientService.VerifyAll();
            mckTokenService.VerifyAll();
        }
Esempio n. 4
0
        public IToken IssueAccessToken(RefreshTokenBase refreshToken)
        {
            AccessToken token = new AccessToken
            {
                ExpiresIn    = 120,
                Token        = Guid.NewGuid().ToString(),
                RefreshToken = refreshToken.Token,
                Scope        = refreshToken.Scope,
                TokenType    = "bearer"
            };

            TokenRepo.AddAccessToken(token);
            return(token);
        }
Esempio n. 5
0
        public void TestExchangingRefreshTokenForAccessToken()
        {
            ClientBase client = new ClientBase {
                ClientId = "id", ClientSecret = "secret"
            };
            AccessTokenBase token = new AccessTokenBase {
                ExpiresIn    = 120,
                RefreshToken = "refresh_token",
                Token        = "new-token",
                TokenType    = Parameters.AccessTokenTypeValues.Bearer
            };
            TokenContext context = new TokenContext
            {
                RefreshToken          = "refresh_token",
                Client                = client,
                ResourceOwnerUsername = "******"
            };
            RefreshTokenBase refreshToken = new RefreshTokenBase
            {
                ClientId = "id",
                Scope    = new string[] { "create", "delete" },
                Token    = "refresh_token"
            };

            Mock <IClientService> mckClientService = new Mock <IClientService>();

            mckClientService.Setup(x => x.AuthenticateClient(context)).Returns(true);
            mckClientService.Setup(x => x.FindClient("id")).Returns(client);

            Mock <ITokenService> mckTokenService = new Mock <ITokenService>();

            mckTokenService.Setup(x => x.FindRefreshToken("refresh_token")).Returns(refreshToken);
            mckTokenService.Setup(x => x.IssueAccessToken(refreshToken)).Returns(token);

            Mock <IServiceFactory> mckFactory = new Mock <IServiceFactory>();

            mckFactory.SetupGet(x => x.ClientService).Returns(mckClientService.Object);
            mckFactory.SetupGet(x => x.TokenService).Returns(mckTokenService.Object);

            RefreshTokenProcessor processor = new RefreshTokenProcessor(mckFactory.Object);

            processor.Process(context);

            Assert.AreEqual(token, context.Token);

            mckFactory.VerifyAll();
            mckClientService.VerifyAll();
            mckTokenService.VerifyAll();
        }
        public override void Process(ITokenContext context)
        {
            if (!ServiceFactory.ClientService.AuthenticateClient(context))
            {
                throw Errors.UnauthorizedClient(context, context.Client);
            }

            ClientBase client = ServiceFactory.ClientService.FindClient(context.Client.ClientId);

            RefreshTokenBase refreshToken = ServiceFactory.TokenService.FindRefreshToken(context.RefreshToken);

            if (refreshToken == null)
            {
                throw Errors.InvalidRequestException(context, Parameters.RefreshToken);
            }

            if (refreshToken.ClientId != context.Client.ClientId)
            {
                throw Errors.InvalidClient(context);
            }


            context.Token = ServiceFactory.TokenService.IssueAccessToken(refreshToken);
        }