Аутентификация ASP.NET Core с Google только для определенной учетной записи - PullRequest
1 голос
/ 02 ноября 2019

В моем приложении ASP.NET Core 3 я хотел бы реализовать вход в систему с помощью Google и разрешить аутентификацию только для определенных пользователей.

До сих пор я следовал руководству из:

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/social-without-identity?view=aspnetcore-3.0 https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins?view=aspnetcore-3.0

Каковы дальнейшие действия, чтобы сделать пользователя авторизованным только для определенных учетных записей Google? Даже если пользователь успешно прошел проверку подлинности в Google, я хочу, чтобы только определенные учетные записи Google (адреса электронной почты) имели доступ к моему приложению ASP.NET Core.

Я пытался назначить делегата дляСобытие OnCreatingEvent, но я не знаю, как отклонить авторизацию.

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
            })
            .AddCookie()
            .AddGoogle(options =>
            {
                options.ClientId = Configuration["google-credentials:ClientId"]; 
                options.ClientSecret = Configuration["google-credentials:ClientSecret"];
                options.Events = new OAuthEvents()
                {
                    OnCreatingTicket = HandleOnCreatingTicket
                };
            });
private async Task HandleOnCreatingTicket(OAuthCreatingTicketContext context)
        {
            var user = context.Identity;

            if (user.Claims.FirstOrDefault(m => m.Type == ClaimTypes.Email).Value != "MY ACCOUNT")
            {
                // How to reject authorization?
            }

            await Task.CompletedTask;
        }

1 Ответ

1 голос
/ 04 ноября 2019

Вы можете создать политику, чтобы проверить, есть ли заявка на имя пользователя в вашем списке разрешенных имен пользователей, вернуть true / false на основе вашего результата проверки:

services.AddAuthorization(options =>
{
    options.AddPolicy("AllowedUsersOnly", policy =>
    {
        policy.RequireAssertion(context =>
        {
            //Here you can get many resouces from context, i get a claim here for example
            var name = context.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value;

            //write your logic to check user name .


            return false;
        });
    });
}); 

Затем вы можете применить политику на вашем контроллере /действие или зарегистрировать глобальный фильтр.

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