devnotcom / devnot-mentor-back-end

Devnot Mentor projesinin Back-end ve Rest API kaynak kodlarını içermektedir.
MIT License
69 stars 21 forks source link

Mevcut authentication yapısı yerine social login'e geçilmesi (GitHub,Google) #21

Open umutluoglu opened 3 years ago

umutluoglu commented 3 years ago

Projeyi ilk yazmaya başladığımızda e-posta ve şifre ile kayıt almayı düşünmüştük ama bunu kolaylık sağlamak ve daha sonradan hesap bilgilerini unutma sorununun önüne geçmek için Github ve Google gibi çok kullanılan 2 veya 3 social media API'ı üzerinden kayıt ve login yapılacak şekilde değiştirmeliyiz.

mustafa-korkmaz commented 3 years ago

Benim kanaatim isi MVP olarak olabildigince basit tutmak adina web app i gerekli tum social loginleri handle edebilecek bir yerde host etmek olur. Boylelikle farkli auth scheme lari handle etmenize gerek kalmaz. Ornegin ben burada 10 satir kodla tum social loginleri tek bir yerden handle edebiliyorum. Kullanici hangi login metodunu secerse secsin ben firebase auth handling yapiyorum. Teknik olarak 1 social login handling ile n tanesinin arasinda backend nezdinde fark olmuyor. Frontend tarafina da extra buton ekleyip 3-5 satir ile hallediyorsunuz. Asagida firebase destekli tum sign-in metodlari var. image

enisn commented 3 years ago

Envai çeşit provider'ın implementasyonu olan mükemmel bir proje: https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers#providers

Ancak gördüğüm kadarıyla Microsoft'un authentication middleware'i yerine manuel olarak bir ActionFilter ile authentication sağlandığı için biraz custom bir implementasyon gerekebilir.

yusufyilmazfr commented 3 years ago

Daha önceden sosyal medya hesapları ile giriş işlemlerini tecrübe etme fırsatım olmadı ama sırf bu özelliklerden faydalanmak için uygulamayı Firebase üzerinde host etmek bana çok da cezbedici gelmedi açıkçası.

umutluoglu commented 3 years ago

Selamlar,

Bu tip ekranlarda sadelik ve az kafa karıştırmanın iyi olacağı düşüncesindeyim. 10 tane api var diye hepsini entegre etmeyelim. Kullanıcı ekrana girdiğinde kalabalığı görüp kafası karışmasın.

  1. GitHub
  2. Google
  3. Microsoft
  4. Facebook

İlk 2'si mutlaka olmalı, diğer 2'si ise github veya google hesabı olmayanlara bir seçenek olarak sunulmalı.

Yusuf Yılmaz @.***>, 7 Tem 2021 Çar, 15:33 tarihinde şunu yazdı:

Daha önceden sosyal medya hesapları ile giriş işlemlerini tecrübe etme fırsatım olmadı ama sırf bu özelliklerden faydalanmak için uygulamayı Firebase üzerinde host etmek bana çok da cezbedici gelmedi açıkçası.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/devnotcom/devnot-mentor-back-end/issues/21#issuecomment-875564613, or unsubscribe https://github.com/notifications/unsubscribe-auth/AITWF4XXQV3V6LMOSJ6YJXLTWRCRHANCNFSM47TEPQIQ .

enisn commented 3 years ago

Daha önceden sosyal medya hesapları ile giriş işlemlerini tecrübe etme fırsatım olmadı ama sırf bu özelliklerden faydalanmak için uygulamayı Firebase üzerinde host etmek bana çok da cezbedici gelmedi açıkçası.

Bir AspNetCore projesi için benim tavsiyem kesinlikşe şu olur: https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers#getting-started

Herhangi bir dependency olmadan, direkt provider'lara gidip token'ı alıp tekrar provider'dan valide edip, kulalnıcı bilgilerini alan bir yapı. Manuel işlemler güzel bir abstraction ile ortaklaştırılmış. Bir kere implemente edince, provider eklemek içni tek yapmak gereken credential'ları girmek. Sadece Şu anki JWT yapısını AspNetcore Middleware'ine tanımlamak gerekir:

services
                .AddAuthentication(opts =>
                {
                    opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                 .AddJwtBearer(opts =>
                {
                    // ... Audience, Isssuer configuration here
                })
                .AddFacebook(opts => this.Configuration.Bind("Authentication:Facebook", opts))
                .AddGoogle(opts => this.Configuration.Bind("Authentication:Google", opts))
                .AddMicrosoftAccount(opts => this.Configuration.Bind("Authentication:MicrosoftAccount", opts))
                .AddLinkedIn(opts => this.Configuration.Bind("Authentication:LinkedIn", opts))
                .AddTwitter(opts => this.Configuration.Bind("Authentication:Twitter", opts))
                .AddGithub(opts => this.Configuration.Bind("Authentication:Github", opts))
                // ....

Front-end Server'a redirect eder, server da login olunacak provider'a redirect eder. Böylece authentication'dan sonra server valide ettikten sonra kendi token'ını verip client'da değişiklik olmadan JWT üzerinden authentication devam eder.

yusufyilmazfr commented 3 years ago

Daha önceden sosyal medya hesapları ile giriş işlemlerini tecrübe etme fırsatım olmadı ama sırf bu özelliklerden faydalanmak için uygulamayı Firebase üzerinde host etmek bana çok da cezbedici gelmedi açıkçası.

Bir AspNetCore projesi için benim tavsiyem kesinlikşe şu olur: https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers#getting-started

Herhangi bir dependency olmadan, direkt provider'lara gidip token'ı alıp tekrar provider'dan valide edip, kulalnıcı bilgilerini alan bir yapı. Manuel işlemler güzel bir abstraction ile ortaklaştırılmış. Bir kere implemente edince, provider eklemek içni tek yapmak gereken credential'ları girmek. Sadece Şu anki JWT yapısını AspNetcore Middleware'ine tanımlamak gerekir:

services
                .AddAuthentication(opts =>
                {
                    opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                })
                 .AddJwtBearer(opts =>
                {
                    // ... Audience, Isssuer configuration here
                })
                .AddFacebook(opts => this.Configuration.Bind("Authentication:Facebook", opts))
                .AddGoogle(opts => this.Configuration.Bind("Authentication:Google", opts))
                .AddMicrosoftAccount(opts => this.Configuration.Bind("Authentication:MicrosoftAccount", opts))
                .AddLinkedIn(opts => this.Configuration.Bind("Authentication:LinkedIn", opts))
                .AddTwitter(opts => this.Configuration.Bind("Authentication:Twitter", opts))
                .AddGithub(opts => this.Configuration.Bind("Authentication:Github", opts))
                // ....

Front-end Server'a redirect eder, server da login olunacak provider'a redirect eder. Böylece authentication'dan sonra server valdide ettikten sonra kendi token'ını verip client'da değişiklik olmadan JWT üzerinden authentication devam eder.

Teşekkür ediyorum, akşam açık olan PR'a baktıktan sonra bunun detaylarına da bakacağım. 🤞

ouzdev commented 3 years ago

Merhaba dünde dc üzerinden konuşmuştuk issue ile ilgili. Sanırım ilgilenen yok halilden başka. Bayram tatili sürecince github ile logini implemente etmeye çalışacağım. Şuanlık sadece github üzerinden kullanıcı girişi sağlaycağım daha sonraki süreçlerde google ve diğerlerinide implemente etmeye çalışırız.

halilkocaoz commented 3 years ago

Merhaba, bu issue için Social Branch'i üzerinde geliştirmeler yaptım.

Birden fazla geliştiricinin değerlendirmesi iyi olur diye düşünüyorum, vaktiniz varsa lütfen inceleyebilir misiniz?