Войдите, используя Google. Приложение NET Core MVC - PullRequest
0 голосов
/ 24 февраля 2020

Я работаю над веб-приложением и хочу, чтобы пользователи входили в систему, используя свои учетные записи Google. После урока здесь я смог добавить кнопку входа. Затем, следуя этому методу, я смог отправить запрос HTTP-Post в мое веб-приложение с токеном авторизации. В приложении у меня есть этот код, чтобы проверить, действителен ли токен аутентификации:

public static LoginModel verifyGoogleIdToken(string idToken, string clientId, string connectionString)
    {
        // Create an HttpClientHandler object and set to use default credentials
        HttpClientHandler handler = new HttpClientHandler();
        handler.UseDefaultCredentials = true;

        // Create an HttpClient object
        HttpClient httpClient = new HttpClient(handler);

        var requestUri = new Uri(string.Format(connectionString, idToken));

        HttpResponseMessage httpResponseMessage;
        try
        {
            httpResponseMessage = httpClient.GetAsync(requestUri).Result;
        }
        catch (Exception ex)
        {
            return null;
        }

        if (httpResponseMessage.StatusCode != HttpStatusCode.OK)
        {
            return null;
        }

        var response = httpResponseMessage.Content.ReadAsStringAsync().Result;

        LoginModel userInfo = JsonSerializer.Deserialize<LoginModel>(response);

        if (userInfo.aud == clientId)
            return userInfo;
        else return null;
    }

здесь idToken - токен аутентификации, полученный от клиента. Строка идентификатора клиента - ".apps.googleusercontent.com", а строка соединения - "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= {0}"

Я также могу сохранить эти данные в базе данных, чтобы сохранить отслеживать пользователей, использующих веб-приложение, и я хочу разрешить определенные страницы, которые могут видеть только авторизованные пользователи. Цель состоит в том, чтобы иметь возможность использовать атрибут [Authorize] в контроллере, чтобы разрешить доступ только зарегистрированным пользователям.

Читая больше о topi c, я узнал, что мне нужно использовать Microsoft. AspNetCore.Authentication.Google и в моем Startup.cs мне нужно настроить службу, что-то вроде этого:

services.AddAuthentication().AddGoogle(options =>
        {
            // Provide the Google Client ID
            options.ClientId = Configuration["Authentication:Google:ClientId"];
            // Register with User Secrets using:
            // dotnet user-secrets set "Authentication:Google:ClientId" "{Client ID}"

            // Provide the Google Client Secret
            options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
            // Register with User Secrets using:
            // dotnet user-secrets set "Authentication:Google:ClientSecret" "{Client Secret}"

            options.ClaimActions.MapJsonKey("urn:google:picture", "picture", "url");
            options.ClaimActions.MapJsonKey("urn:google:locale", "locale", "string");
            options.SaveTokens = true;

            options.Events.OnCreatingTicket = ctx =>
            {
                List<AuthenticationToken> tokens = ctx.Properties.GetTokens().ToList(); 

                tokens.Add(new AuthenticationToken()
                {
                    Name = "TicketCreated", 
                    Value = DateTime.UtcNow.ToString()
                });

                ctx.Properties.StoreTokens(tokens);

                return Task.CompletedTask;
            };
        });

Как мне перейти отсюда, чтобы иметь возможность использовать систему аутентификации для авторизованных пользователей? Я нашел некоторую информацию об использовании SignInManager, но я не совсем уверен, как это работает и как я должен реализовать это в своем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...