Share via


ASP.NET Core'da Google dış oturum açma kurulumu

Yayınlayanlar Valeriy Novytskyy ve Rick Anderson

Bu öğreticide, kullanıcıların önceki sayfada oluşturulan ASP.NET Core projesini kullanarak Google hesaplarıyla oturum açmasına nasıl olanak tanıyabileceğiniz gösterilmektedir.

Google OAuth 2.0 İstemci Kimliğini ve gizli dizisini oluşturma

  • Google Oturum Açma'yı web uygulamanıza tümleştirme (Google belgeleri) ile ilgili yönergeleri izleyin.

  • Google API & Hizmetleri'ne gidin.

  • Önce bir Proje bulunmalıdır, bir proje oluşturmanız gerekebilir. Proje seçildikten sonra Pano'yu girin.

  • Panonun Oauth onayı ekranında:

    • Kullanıcı Türü - Dış ve CREATE'ı seçin.
    • Uygulama bilgileri iletişim kutusunda uygulama, kullanıcı desteği e-postası ve geliştirici iletişim bilgileri için bir uygulama adı sağlayın.
    • Kapsamlar adımında ilerleyin.
    • Kullanıcıları test et adımında ilerleyin.
    • OAuth onay ekranını gözden geçirin ve uygulama Panosu'na geri dönün.
  • Uygulama Panosu'nun Kimlik Bilgileri sekmesinde CREATE CREDENTIALS>OAuth istemci kimliği'ni seçin.

  • Uygulama türü>Web uygulaması'nı seçin, bir ad seçin.

  • Yetkili yeniden yönlendirme URI'leri bölümünde URI EKLE'yi seçerek yeniden yönlendirme URI'sini ayarlayın. Örnek yeniden yönlendirme URI'si: https://localhost:{PORT}/signin-google, burada {PORT} yer tutucu uygulamanın bağlantı noktasıdır.

  • OLUŞTUR düğmesini seçin.

  • uygulamanın yapılandırmasında kullanmak üzere İstemci Kimliği ve gizli dizisini kaydedin.

  • Siteyi dağıtırken şunları da yapabilirsiniz:

    • Google Konsolu'ndaki uygulamanın yeniden yönlendirme URI'sini uygulamanın dağıtılan yeniden yönlendirme URI'sine güncelleştirin.
    • Üretim yeniden yönlendirme URI'siyle üretim uygulaması için Google Konsolu'nda yeni bir Google API kaydı oluşturun.

Google istemci kimliğini ve gizli dizisini depolama

Gizli Dizi Yöneticisi ile Google istemci kimliği ve gizli dizi değerleri gibi hassas ayarları depolayın. Bu örnek için aşağıdaki adımları kullanın:

  1. Gizli depolamayı etkinleştirme başlığındaki yönergelere göre projeyi gizli depolama için başlatın.

  2. Gizli dizi anahtarları ve Authentication:Google:ClientSecretile hassas ayarları yerel gizli dizi deposunda depolayınAuthentication:Google:ClientId:

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
    

: ayıracı, tüm platformlarda ortam değişkeni hiyerarşik anahtarlarıyla çalışmaz. __, çift alt çizgi:

  • Tüm platformlar tarafından desteklenir. Örneğin : ayıracı Bash tarafından desteklenmez ancak __ desteklenir.
  • Otomatik olarak bir : ile değiştirilir

API kimlik bilgilerinizi ve kullanımınızı API Konsolu'nda yönetebilirsiniz.

Google kimlik doğrulamayı yapılandırma

Microsoft.AspNetCore.Authentication.Google NuGet paketini uygulamaya ekleyin.

Kimlik Doğrulama hizmetini içine Startup.ConfigureServicesekleyin:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication()
        .AddGoogle(options =>
        {
            IConfigurationSection googleAuthNSection =
                Configuration.GetSection("Authentication:Google");

            options.ClientId = googleAuthNSection["ClientId"];
            options.ClientSecret = googleAuthNSection["ClientSecret"];
        });
}

Kimlik Doğrulama hizmetini içine Programekleyin:

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

services.AddAuthentication().AddGoogle(googleOptions =>
    {
        googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
        googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
    });

çağrısı AddIdentity varsayılan düzen ayarlarını yapılandırıyor. Aşırı AddAuthentication(IServiceCollection, String) yükleme özelliği ayarlar DefaultScheme . Aşırı AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) yükleme, farklı amaçlarla varsayılan kimlik doğrulama düzenlerini ayarlamak için kullanılabilen kimlik doğrulama seçeneklerini yapılandırmaya olanak tanır. Önceden yapılandırılmış AuthenticationOptions özellikleri geçersiz kılmak için AddAuthentication sonraki çağrılar.

AuthenticationBuilder kimlik doğrulama işleyicisini kaydeden uzantı yöntemleri, kimlik doğrulama düzeni başına yalnızca bir kez çağrılabilir. Düzen özelliklerini, düzen adını ve görünen adı yapılandırmaya olanak sağlayan aşırı yüklemeler vardır.

Google ile oturum açma

  • Uygulamayı çalıştırın ve Oturum aç'ı seçin. Google ile oturum açma seçeneği görüntülenir.
  • Kimlik doğrulaması için Google'a yönlendiren Google düğmesini seçin.
  • Google kimlik bilgilerinizi girdikten sonra yeniden web sitesine yönlendirilirsiniz.

İstek bilgilerini ara sunucu veya yük dengeleyici ile iletme

Uygulama bir ara sunucunun veya yük dengeleyicinin arkasına dağıtılırsa, özgün istek bilgilerinden bazıları istek üst bilgilerinde uygulamaya iletilebilir. Bu bilgiler genellikle güvenli istek düzenini (https), ana bilgisayarı ve istemci IP adresini içerir. Uygulamalar, özgün istek bilgilerini bulmak ve kullanmak için bu istek üst bilgilerini otomatik olarak okumaz.

Düzen, dış sağlayıcılarla kimlik doğrulaması akışını etkileyen bağlantı oluşturmada kullanılır. Güvenli düzenin (https) kaybedilmesi, uygulamanın yanlış güvenli olmayan yeniden yönlendirme URL'leri oluşturmasını sağlar.

Özgün istek bilgilerini uygulamaya, istek işleme için kullanılabilir hale getirmek için İletilen Üstbilgiler Ara Yazılımını kullanın.

Daha fazla bilgi için bkz. ASP.NET Core'u ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapılandırma.

Çoklu kimlik doğrulaması sağlayıcıları

Uygulama birden çok sağlayıcı gerektirdiğinde, sağlayıcı uzantısı yöntemlerini arkasında AddAuthenticationzincirleme:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Google kimlik doğrulaması tarafından desteklenen yapılandırma seçenekleri hakkında daha fazla bilgi için bkz GoogleOptions . API başvurusu. Bu, kullanıcı hakkında farklı bilgiler istemek için kullanılabilir.

Varsayılan geri çağırma URI'sini değiştirme

URI segmenti /signin-google , Google kimlik doğrulama sağlayıcısının varsayılan geri çağırması olarak ayarlanır. Sınıfın devralınan RemoteAuthenticationOptions.CallbackPath özelliği aracılığıyla Google kimlik doğrulama ara yazılımını yapılandırırken varsayılan geri çağırma URI'sini GoogleOptions değiştirebilirsiniz.

Sorun giderme

  • Oturum açma işe yaramazsa ve herhangi bir hata almıyorsanız, sorunun hatalarını ayıklamayı kolaylaştırmak için geliştirme moduna geçin.
  • içinde çağrılarak services.AddIdentityConfigureServicesyapılandırılmazsa Identity ArgumentException'da sonuçların kimliğini doğrulamaya çalışma: 'SignInScheme' seçeneği sağlanmalıdır. Bu öğreticide kullanılan proje şablonu yapılandırıldığından emin olun Identity .
  • Site veritabanı ilk geçiş uygulanarak oluşturulmadıysa, istek hatası işlenirken veritabanı işlemi başarısız oldu iletisini alırsınız. Veritabanını oluşturmak için Geçişleri Uygula'yı seçin ve hatadan sonra devam etmek için sayfayı yenileyin.
  • Google gibi OAuth 2.0 sağlayıcısı tarafından isteğin kimliğini başarıyla doğruladıktan sonra HTTP 500 hatası: Bu GitHub sorununa bakın.
  • React için Google ve diğer SPA uygulamalarıyla dış kimlik doğrulaması uygulama: Bu GitHub sorununa bakın.

Sonraki adımlar

  • Bu makalede Google'da nasıl kimlik doğrulaması yapabileceğiniz gösterildi. Önceki sayfada listelenen diğer sağlayıcılarla kimlik doğrulaması yapmak için benzer bir yaklaşım izleyebilirsiniz.
  • Uygulamayı Azure'da yayımladıktan sonra Google API Konsolu'nda öğesini sıfırlayın ClientSecret .
  • Azure portalında Authentication:Google:ClientId ve'yi Authentication:Google:ClientSecret uygulama olarak ayarlayın. Yapılandırma sistemi, ortam değişkenlerinden anahtarları okuyacak şekilde ayarlanır.