Aracılığıyla paylaş


ASP.NET Core olmadan sosyal oturum açma sağlayıcısı kimlik doğrulamasını kullanma Identity

Tarafından Kirk Larkin ve Rick Anderson

ASP.NET Core'da Facebook ve Google kimlik doğrulaması, kullanıcıların dış kimlik doğrulama sağlayıcılarının kimlik bilgileriyle OAuth 2.0 kullanarak oturum açmasına nasıl olanak tanıyacaklarını açıklar. Bu makalede açıklanan yaklaşım, kimlik doğrulama sağlayıcısı olarak ASP.NET Core Identity içerir.

Bu örnek, ASP.NET Core Identityolmadan bir dış kimlik doğrulama sağlayıcısının nasıl kullanılacağını gösterir. Bu yaklaşım, ASP.NET Core'un Identitytüm özelliklerini gerektirmeyen ancak yine de güvenilen bir dış kimlik doğrulama sağlayıcısıyla tümleştirme gerektiren uygulamalar için kullanışlıdır.

Bu örnek, kullanıcıların kimliğini doğrulamak için Google kimlik doğrulamasını kullanır. Google kimlik doğrulamasının kullanılması, oturum açma işlemini yönetmenin karmaşıklıklarının çoğunu Google'a kaydırıyor. Farklı bir dış kimlik doğrulama sağlayıcısıyla tümleştirmek için aşağıdaki makalelere bakın:

Yapılandırma

içindeProgram.cs, uygulamanın kimlik doğrulama düzenlerini , AddCookieve AddGoogle yöntemleriyle AddAuthenticationyapılandırın:

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.Google;

var builder = WebApplication.CreateBuilder(args);

builder.Services
    .AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddGoogle(options =>
    {
        options.ClientId = builder.Configuration["Authentication:Google:ClientId"];
        options.ClientSecret = builder.Configuration["Authentication:Google:ClientSecret"];
    });

builder.Services.AddRazorPages();

çağrısı AddAuthentication , uygulamanın DefaultSchemeöğesini ayarlar. DefaultScheme, aşağıdaki HttpContext kimlik doğrulama uzantısı yöntemleri tarafından kullanılan varsayılan düzendir:

Uygulamanın DefaultScheme CookieAuthenticationDefaults.AuthenticationScheme öğesinin ("Tanımlama Bilgileri") olarak ayarlanması, uygulamayı bu uzantı yöntemleri için varsayılan düzen olarak Tanımlama Bilgileri kullanacak şekilde yapılandırmaktadır. Uygulamanın DefaultChallengeScheme GoogleDefaults.AuthenticationScheme ayarının ("Google") olarak ayarlanması, uygulamasına yapılan çağrılar ChallengeAsynciçin varsayılan düzen olarak Google'ı kullanacak şekilde yapılandırılır. DefaultChallengeSchemeDefaultSchemegeçersiz kılar. Ayarlandığında geçersiz kılan DefaultScheme diğer özellikler için bkzAuthenticationOptions.

içinde Program.cs, çağrısı UseAuthentication ve UseAuthorization. Bu ara yazılım bileşimi özelliği ayarlar HttpContext.User ve istekler için Yetkilendirme Ara Yazılımını çalıştırır:

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

Kimlik doğrulama düzenleri hakkında daha fazla bilgi edinmek için bkz . Kimlik Doğrulama Kavramları. Kimlik doğrulaması hakkında cookie daha fazla bilgi edinmek için bkz. ASP.NET Core Identityolmadan kimlik doğrulamasını kullanmacookie.

Yetkilendirme uygulama

[Authorize] özniteliğini bir denetleyiciye, eyleme veya sayfaya uygulayarak uygulamanın kimlik doğrulama yapılandırmasını test edin. Aşağıdaki kod, sayfaya Privacy erişimi kimliği doğrulanmış kullanıcılarla sınırlar:

[Authorize]
public class PrivacyModel : PageModel
{

}

Erişim belirtecini kaydetme

SaveTokens , başarılı bir yetkilendirmeden sonra içinde erişim ve yenileme belirteçlerinin depolanıp depolanmayacağını AuthenticationProperties tanımlar. SaveTokens, son kimlik doğrulamasının cookieboyutunu küçültmek için varsayılan olarak olarak ayarlanırfalse.

Başarılı bir yetkilendirmeden sonra erişimi kaydetmek ve belirteçleri yenilemek için içinde Program.csolarak true ayarlayınSaveTokens:

builder.Services
    .AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddGoogle(options =>
    {
        options.ClientId = builder.Configuration["Authentication:Google:ClientId"];
        options.ClientSecret = builder.Configuration["Authentication:Google:ClientSecret"];
        options.SaveTokens = true;
    });

Kaydedilmiş bir belirteci almak için kullanın GetTokenAsync. Aşağıdaki örnek adlı access_tokenbelirteci alır:

public async Task OnGetAsync()
{
    var accessToken = await HttpContext.GetTokenAsync(
        GoogleDefaults.AuthenticationScheme, "access_token");

    // ...
}

Oturumu kapat

Geçerli kullanıcının oturumunu kapatmak ve kullanıcısını cookiesilmek için öğesini çağırın SignOutAsync. Aşağıdaki kod Dizin sayfasına bir Logout sayfa işleyicisi ekler:

public class IndexModel : PageModel
{
    public async Task<IActionResult> OnPostLogoutAsync()
    {
        // using Microsoft.AspNetCore.Authentication;
        await HttpContext.SignOutAsync();
        return RedirectToPage();
    }
}

çağrısının SignOutAsync bir kimlik doğrulama şeması belirtmediğini fark edin. Uygulama DefaultSchemegeri dönüş olarak , CookieAuthenticationDefaults.AuthenticationScheme, kullanır.

Ek kaynaklar

ASP.NET Core'da Facebook ve Google kimlik doğrulaması, kullanıcıların dış kimlik doğrulama sağlayıcılarının kimlik bilgileriyle OAuth 2.0 kullanarak oturum açmasına nasıl olanak tanıyacaklarını açıklar. Bu makalede açıklanan yaklaşım, kimlik doğrulama sağlayıcısı olarak ASP.NET Core Identity içerir.

Bu örnek, ASP.NET Core Identityolmadan bir dış kimlik doğrulama sağlayıcısının nasıl kullanılacağını gösterir. Bu yaklaşım, ASP.NET Core'un Identitytüm özelliklerini gerektirmeyen ancak yine de güvenilen bir dış kimlik doğrulama sağlayıcısıyla tümleştirme gerektiren uygulamalar için kullanışlıdır.

Bu örnek, kullanıcıların kimliğini doğrulamak için Google kimlik doğrulamasını kullanır. Google kimlik doğrulamasının kullanılması, oturum açma işlemini yönetmenin karmaşıklıklarının çoğunu Google'a kaydırıyor. Farklı bir dış kimlik doğrulama sağlayıcısıyla tümleştirmek için aşağıdaki makalelere bakın:

Yapılandırma

yöntemindeConfigureServices, uygulamanın kimlik doğrulama düzenlerini , AddCookieve AddGoogle yöntemleriyle AddAuthenticationyapılandırın:

public void ConfigureServices(IServiceCollection services)
{
    // requires
    // using Microsoft.AspNetCore.Authentication.Cookies;
    // using Microsoft.AspNetCore.Authentication.Google;
    // NuGet package Microsoft.AspNetCore.Authentication.Google
    services
        .AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddGoogle(options =>
        {
            options.ClientId = Configuration["Authentication:Google:ClientId"];
            options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
        });

    services.AddRazorPages();
}

çağrısı AddAuthentication , uygulamanın DefaultSchemeöğesini ayarlar. DefaultScheme, aşağıdaki HttpContext kimlik doğrulama uzantısı yöntemleri tarafından kullanılan varsayılan düzendir:

Uygulamanın DefaultScheme CookieAuthenticationDefaults.AuthenticationScheme öğesinin ("Tanımlama Bilgileri") olarak ayarlanması, uygulamayı bu uzantı yöntemleri için varsayılan düzen olarak Tanımlama Bilgileri kullanacak şekilde yapılandırmaktadır. Uygulamanın DefaultChallengeScheme GoogleDefaults.AuthenticationScheme ayarının ("Google") olarak ayarlanması, uygulamasına yapılan çağrılar ChallengeAsynciçin varsayılan düzen olarak Google'ı kullanacak şekilde yapılandırılır. DefaultChallengeSchemeDefaultSchemegeçersiz kılar. Ayarlandığında geçersiz kılan DefaultScheme diğer özellikler için bkzAuthenticationOptions.

içindeStartup.Configure, çağrısı ve UseAuthorization ile arasında öğesini arayın UseAuthentication UseRouting UseEndpoints. Bu ara yazılım bileşimi özelliği ayarlar HttpContext.User ve istekler için Yetkilendirme Ara Yazılımını çalıştırır:

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});

Kimlik doğrulama düzenleri hakkında daha fazla bilgi edinmek için bkz . Kimlik Doğrulama Kavramları. Kimlik doğrulaması hakkında cookie daha fazla bilgi edinmek için bkz. ASP.NET Core Identityolmadan kimlik doğrulamasını kullanmacookie.

Yetkilendirme uygulama

[Authorize] özniteliğini bir denetleyiciye, eyleme veya sayfaya uygulayarak uygulamanın kimlik doğrulama yapılandırmasını test edin. Aşağıdaki kod, sayfaya Privacy erişimi kimliği doğrulanmış kullanıcılarla sınırlar:

[Authorize]
public class PrivacyModel : PageModel
{

}

Oturumu kapat

Geçerli kullanıcının oturumunu kapatmak ve kullanıcısını cookiesilmek için öğesini çağırın SignOutAsync. Aşağıdaki kod Dizin sayfasına bir Logout sayfa işleyicisi ekler:

public class IndexModel : PageModel
{
    public async Task<IActionResult> OnPostLogoutAsync()
    {
        await HttpContext.SignOutAsync();
        return RedirectToPage();
    }
}

çağrısının SignOutAsync bir kimlik doğrulama şeması belirtmediğini fark edin. uygulamasının DefaultScheme CookieAuthenticationDefaults.AuthenticationScheme uygulaması geri dönüş olarak kullanılır.

Ek kaynaklar