Example #1
0
        public ApiResponse <Token> GetAccessToken <T>(T credentials) where T : IOAuthCredentials
        {
            ClientCredentials credentials1 = (object)credentials as ClientCredentials;

            if (credentials1 != null)
            {
                return(this.GetAccessToken(credentials1));
            }
            PasswordCredentials credentials2 = (object)credentials as PasswordCredentials;

            if (credentials2 != null)
            {
                return(this.GetAccessToken(credentials2));
            }
            AuthorizationCodeCredentials credentials3 = (object)credentials as AuthorizationCodeCredentials;

            if (credentials3 != null)
            {
                return(this.GetAccessToken(credentials3));
            }
            RefreshTokenCredentials credentials4 = (object)credentials as RefreshTokenCredentials;

            if (credentials4 != null)
            {
                return(this.GetAccessToken(credentials4));
            }
            throw new AuthenticationException("Unsupported credential type");
        }
Example #2
0
        public async Task <ApiResponse <Token> > GetAccessTokenAsync <T>(T credentials, CancellationToken cancellationToken = default(CancellationToken)) where T : IOAuthCredentials
        {
            ClientCredentials credentials1 = (object)(T)credentials as ClientCredentials;

            if (credentials1 != null)
            {
                return(await this.GetAccessTokenAsync(credentials1, cancellationToken));
            }
            PasswordCredentials credentials2 = (object)(T)credentials as PasswordCredentials;

            if (credentials2 != null)
            {
                return(await this.GetAccessTokenAsync(credentials2, cancellationToken));
            }
            AuthorizationCodeCredentials credentials3 = (object)(T)credentials as AuthorizationCodeCredentials;

            if (credentials3 != null)
            {
                return(await this.GetAccessTokenAsync(credentials3, cancellationToken));
            }
            RefreshTokenCredentials credentials4 = (object)(T)credentials as RefreshTokenCredentials;

            if (credentials4 != null)
            {
                return(await this.GetAccessTokenAsync(credentials4, cancellationToken));
            }
            throw new AuthenticationException("Unsupported credential type");
        }
        public async Task <Token> RefreshToken(RefreshTokenCredentials refreshTokenCredentials)
        {
            var unauthorizedException = new UnauthorizedAccessException("Unauthorized token refresh action");
            var userRefreshToken      = context.RefreshToken.SingleOrDefault(t => t.Token == refreshTokenCredentials.Token && t.UserId == refreshTokenCredentials.UserId);

            if (userRefreshToken == null)
            {
                throw unauthorizedException;
            }

            var tokenManager = new JwtSecurityTokenHandler();
            var token        = tokenManager.ReadJwtToken(refreshTokenCredentials.Token);

            var tokenUserGuid = token.Claims.Where(c => c.Type == "UserId").Select(c => c.Value).FirstOrDefault();

            if (tokenUserGuid == null || tokenUserGuid != refreshTokenCredentials.UserId.ToString())
            {
                throw unauthorizedException;
            }

            var user = await userManager.FindByIdAsync(refreshTokenCredentials.UserId.ToString());

            if (user == null)
            {
                throw unauthorizedException;
            }

            return(GenerateUserToken(user));
        }
Example #4
0
 public ApiResponse <Token> GetAccessToken(RefreshTokenCredentials credentials)
 {
     return(this.GetAccessToken((IDictionary <string, string>) new Dictionary <string, string>()
     {
         {
             "refresh_token",
             credentials.RefreshToken
         },
         {
             "grant_type",
             credentials.GrantType
         }
     }, string.Format("bearer {0}", (object)credentials.AccessToken)));
 }
Example #5
0
 public async Task <ApiResponse <Token> > GetAccessTokenAsync(RefreshTokenCredentials credentials, CancellationToken cancellationToken = default(CancellationToken))
 {
     return(await this.GetAccessTokenAsync((IDictionary <string, string>) new Dictionary <string, string>()
     {
         {
             "refresh_token",
             credentials.RefreshToken
         },
         {
             "grant_type",
             credentials.GrantType
         }
     }, credentials.AccessToken, cancellationToken));
 }
        public async Task <IActionResult> RefreshToken([FromBody] RefreshTokenCredentials refreshTokenCredentials)
        {
            var token = await authService.RefreshToken(refreshTokenCredentials);

            return(Ok(token));
        }