public IActionResult Post([FromBody] TokenReq tokenReq)
        {
            List <string> ErrorMessages = new List <string>();

            ErrorMessages.Add("okokok");

            // authentication successful so generate jwt token
            var tokenHandler    = new JwtSecurityTokenHandler();
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Email, tokenReq.Username),
                    new Claim(ClaimTypes.Name, tokenReq.Username)
                }),
                Expires            = DateTime.UtcNow.AddMinutes(15),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(_jwtSetting.Secret), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            var refreshToken = GenerateRefreshToken();

            return(Ok(new
            {
                Token = tokenHandler.WriteToken(token),
                RereshToken = refreshToken
            }));
        }
        /// <summary>
        /// Get a valid access token using credentials.
        /// </summary>
        /// <param name="email"></param>
        /// <param name="securePassword"></param>
        /// <returns></returns>
        private async Task <TokenResp> GetTokenWithUsernameAndPasswordAsync(string email, SecureString securePassword)
        {
            var tokenReq = new TokenReq {
                Username  = email,
                Password  = securePassword,
                GrantType = "password"
            };

            var login = await restPoolService.IdentityAPI.GetTokenAsync(tokenReq);

            if (login.access_token == null)
            {
                throw new InvalidOperationException(Localization.Resources.Snack_Message_LogIn_NoTokenAvailable);
            }
            return(login);
        }
        /// <summary>
        /// Logs in a user using <paramref name="username"/> and <paramref name="password"/> as parameters.
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns>Returns the user details that logged in.</returns>
        public async Task <ProfileResp> LogInAsync(string username, SecureString password)
        {
            // get token
            var token = await GetTokenWithUsernameAndPasswordAsync(username, password);

            GlobalSettings.AccessToken = token.access_token;

            // get profile
            var request = new TokenReq {
                Username = username
            };
            var userProfile = await restPoolService.ProfilesAPI.GetUserAsync();

            if (userProfile.id == null)
            {
                throw new InvalidOperationException(Localization.Resources.Snack_Message_Profile_NoProfileAvailable);
            }
            authenticatedUser = userProfile.displayName;
            return(userProfile);
        }
Beispiel #4
0
        /// <summary>
        /// Get a valid access token using credentials.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <TokenResp> GetTokenAsync(TokenReq request)
        {
            var client = new RestSharp.RestClient(GlobalSettings.AzureLoginEndpoint);

            client.Timeout = -1;

            var internalRequest = new RestSharp.RestRequest(RestSharp.Method.POST);

            internalRequest.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            internalRequest.AddHeader("Cookie", "x-ms-gateway-slice=prod; stsservicecookie=ests; fpc=AhfW_FJrHCJGl1Lr3XFEqOjhvS2OAQAAAPhsttYOAAAA");
            internalRequest
            .AddParameter("grant_type", request.GrantType)
            .AddParameter("username", request.Username)
            .AddParameter("password", new System.Net.NetworkCredential(string.Empty, request.Password).Password)
            .AddParameter("client_id", GlobalSettings.ClientId)
            .AddParameter("resource", GlobalSettings.MsGraphResourceEndpoint);

            RestSharp.IRestResponse response = await client.ExecuteAsync(internalRequest);

            return(JsonHelper.ToClass <TokenResp>(response.Content));
        }