=== AccountController.cs === using IdentityModel.Client; using Kim.Framework.Dto; using Microsoft.AspNetCore.Mvc; using srv.app.id.ladaexpress.vn.Infrastructure.Dto.Models.Accounts; using srv.app.id.ladaexpress.vn.Infrastructure.Dto.Results.Accounts; using System; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using static IdentityModel.OidcConstants; namespace srv.app.id.ladaexpress.vn.Controllers { [Route("[controller]")] [ApiController] public class AccountController : ControllerBase { [HttpPost] public async Task Login(LoginModel model) { var result = new LoginResult(); if (!ModelState.IsValid) { var allErrors = ModelState.Values.SelectMany(v => v.Errors.Select(e=>e.ErrorMessage)).ToList(); result.Result = Result.Failed; result.Message = string.Join("\n", allErrors); } else { HttpClient httpClient = new HttpClient(); var disco = await httpClient.GetDiscoveryDocumentAsync("https://id.ladaexpress.vn"); PasswordTokenRequest passwordTokenRequest = new PasswordTokenRequest() { Address = disco.TokenEndpoint, ClientId = "AppClients", ClientSecret = "kNbPZcuUMc6nufZ2oIJN", GrantType = GrantTypes.Password, Scope = "BackEnd", UserName = model.UserName, Password = model.Password }; var tokenResponse = await httpClient.RequestPasswordTokenAsync(passwordTokenRequest); if (tokenResponse.IsError) { Console.WriteLine(tokenResponse.Error); result.Result = Result.Failed; result.Message = $"{tokenResponse.Error}: {tokenResponse.ErrorDescription}"; } else { result.Token = tokenResponse.AccessToken; } Console.WriteLine(tokenResponse.Json); Console.WriteLine("\n\n"); } return Ok(result); } } }