Реализация логики аутентификации промежуточного программного обеспечения токенов Google/Facebook
Поэтому сначала я кратко объясню, чего я пытаюсь достичь.
Вариант использования будет заключаться в том, что пользователь может из мобильного приложения или СПА-центра зарегистрироваться с помощью Google или Facebook в моем приложении, а затем войти в систему и использовать все, что может предложить приложение.
Я использую .NET Core 2.2 в качестве приложения RESTful WEBAPI с IdentityServer.
Есть мобильное и СПА-приложение для использования api.
С моей точки зрения понимания API на основе REST, клиент должен отправлять некоторый токен для каждого запроса, подлежащего аутентификации?
Я реализовал логику для регистрации/входа в систему Google acc с помощью
Google.Apis.Auth, но я не могу обернуть свою голову вокруг промежуточного программного обеспечения, которое будет аутентифицировать каждый запрос.
Я тоже привыкаю к .NET Core, простите мне мое незнание.
P.S. У меня такое чувство, что я делаю здесь что-то очень неправильное.
Что я уже пробовал:
Вот моя логика входа в систему с помощью google.
Я посылаю сведения об идентификаторе маркера от клиента к API, где его быть проверены и все клиент информация сохраняется, если ее нет уже.
[AllowAnonymous] [HttpPost] [Route ("signin-google")] public async Task<IActionResult> GoogleSignIn ([FromQuery] string token) { if (token == null) { return BadRequest (new { message = "Derp! You have to provide a token!" }); } var settings = new GoogleJsonWebSignature.ValidationSettings () { Audience = new List<string> () { "XXXXXXXXXXXXXXXX.apps.googleusercontent.com" } }; GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync (token, settings); var result = await _signInManager.ExternalLoginSignInAsync (payload.Issuer, payload.JwtId, isPersistent : false); if (!result.Succeeded) { ApplicationUser user = new ApplicationUser () { Email = payload.Email, Firstname = payload.GivenName, Lastname = payload.FamilyName, PictureLink = payload.Picture, UserName = payload.Email, }; UserLoginInfo userLogin = new UserLoginInfo (payload.Issuer, payload.JwtId, payload.Name); await _userManager.CreateAsync (user); await _userManager.AddLoginAsync (user, userLogin); await _signInManager.SignInAsync (user, isPersistent : false); return Ok (userLogin.ProviderKey); } return Ok (payload.JwtId); }