Faris Karcic Ответов: 1

Реализация логики аутентификации промежуточного программного обеспечения токенов 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);
}

1 Ответов

Рейтинг:
0

James Walsh Jr

Вот ссылка к документации от IdentityServer о том, как включить Google Auth в ваше промежуточное программное обеспечение .Net Core.

Фрагмент кода ниже:

<pre>services.AddAuthentication()
    .AddGoogle("Google", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "<insert here>";
        options.ClientSecret = "<insert here>";
    });