ASP.NET Core Identity を使用せずにソーシャル サインイン プロバイダー認証を使用する
作成者: Kirk Larkin、Rick Anderson
ASP.NET Core での Facebook 認証と Google 認証に関する記事には、ユーザーが外部認証プロバイダーからの資格情報で OAuth 2.0 を使用してサインインできるようにする方法が説明されています。 そのトピックで説明されている方法には、ASP.NET Core Identity が認証プロバイダーとして含まれています。
このサンプルでは、ASP.NET Core Identity を使用せずに外部認証プロバイダーを使用する方法を示します。 この方法は、ASP.NET Core Identity のすべての機能を必要としませんが、信頼された外部認証プロバイダーとの統合を引き続き必要とするアプリに便利です。
このサンプルでは、ユーザーの認証に Google 認証を使用します。 Google 認証を使用すると、サインイン プロセスの複雑な管理の多くが Google に移ります。 別の外部認証プロバイダーと統合するには、次の記事を参照してください。
構成
Program.cs
で、AddAuthentication、AddCookie、AddGoogle の各メソッドを使用して、アプリの認証スキームを構成します。
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();
AddAuthentication を呼び出すと、アプリの DefaultScheme が設定されます。 DefaultScheme
は、次の HttpContext
認証拡張メソッドによって使用される既定のスキームです。
アプリの DefaultScheme
を CookieAuthenticationDefaults.AuthenticationScheme ("Cookie") に設定すると、これらの拡張メソッドの既定スキームとして Cookie を使うようにアプリが構成されます。 アプリの DefaultChallengeScheme を GoogleDefaults.AuthenticationScheme ("Google") に設定すると、ChallengeAsync
に対する呼び出しの既定のスキームとして、Google を使用するようにアプリが構成されます。 DefaultChallengeScheme
によって DefaultScheme
がオーバーライドされます。 設定時に DefaultScheme
をオーバーライドする追加のプロパティについては、AuthenticationOptions を参照してください。
Program.cs
で、UseAuthentication と UseAuthorization を呼び出します。 このミドルウェアの組み合わせにより、HttpContext.User プロパティが設定され、要求に対して認可ミドルウェアが実行されます。
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
認証スキームの詳細については、「認証の概念」を参照してください。 cookie 認証の詳細については、ASP.NET Core Identity を使わずに cookie 認証を使う方法に関するページを参照してください。
承認の適用
コントローラー、アクション、またはページに [Authorize] 属性を適用して、アプリの認証構成をテストします。 次のコードによって、認証されたユーザーへの Privacy ページへのアクセスが制限されます。
[Authorize]
public class PrivacyModel : PageModel
{
}
アクセス トークンを保存する
SaveTokens で、認可が成功した後に、アクセス トークンと更新トークンを AuthenticationProperties に格納するかどうかを定義します。 既定では、SaveTokens
は、最終的な認証 cookie のサイズを小さくする false
に設定されます。
認可が成功した後にアクセス トークンと更新トークンを保存するには、Program.cs
の SaveTokens
を true
に設定します。
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;
});
保存されたトークンを取得するには、GetTokenAsync を使用します。 次の例では、access_token
という名前のトークンを取得しています。
public async Task OnGetAsync()
{
var accessToken = await HttpContext.GetTokenAsync(
GoogleDefaults.AuthenticationScheme, "access_token");
// ...
}
サインアウト
現在のユーザーをサインアウトさせてその cookie を削除するには、SignOutAsync を呼び出します。 次のコードによって、Logout
ページに Logout
ページ ハンドラーが追加されます。
public class IndexModel : PageModel
{
public async Task<IActionResult> OnPostLogoutAsync()
{
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignOutAsync();
return RedirectToPage();
}
}
SignOutAsync
への呼び出しで認証スキームが指定されていないことに注目してください。 アプリは、フォールバックとして DefaultScheme
、CookieAuthenticationDefaults.AuthenticationScheme
を使用します。
その他の技術情報
ASP.NET Core での Facebook 認証と Google 認証に関する記事には、ユーザーが外部認証プロバイダーからの資格情報で OAuth 2.0 を使用してサインインできるようにする方法が説明されています。 そのトピックで説明されている方法には、ASP.NET Core Identity が認証プロバイダーとして含まれています。
このサンプルでは、ASP.NET Core Identity を使用せずに外部認証プロバイダーを使用する方法を示します。 この方法は、ASP.NET Core Identity のすべての機能を必要としませんが、信頼された外部認証プロバイダーとの統合を引き続き必要とするアプリに便利です。
このサンプルでは、ユーザーの認証に Google 認証を使用します。 Google 認証を使用すると、サインイン プロセスの複雑な管理の多くが Google に移ります。 別の外部認証プロバイダーと統合するには、次の記事を参照してください。
構成
ConfigureServices
メソッドで、AddAuthentication、AddCookie、AddGoogle の各メソッドを使用して、アプリの認証スキームを構成します。
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();
}
AddAuthentication を呼び出すと、アプリの DefaultScheme が設定されます。 DefaultScheme
は、次の HttpContext
認証拡張メソッドによって使用される既定のスキームです。
アプリの DefaultScheme
を CookieAuthenticationDefaults.AuthenticationScheme ("Cookie") に設定すると、これらの拡張メソッドの既定スキームとして Cookie を使うようにアプリが構成されます。 アプリの DefaultChallengeScheme を GoogleDefaults.AuthenticationScheme ("Google") に設定すると、ChallengeAsync
に対する呼び出しの既定のスキームとして、Google を使用するようにアプリが構成されます。 DefaultChallengeScheme
によって DefaultScheme
がオーバーライドされます。 設定時に DefaultScheme
をオーバーライドする追加のプロパティについては、AuthenticationOptions を参照してください。
Startup.Configure
では、UseRouting と UseEndpoints の呼び出しの間に UseAuthentication と UseAuthorization を呼び出します。 このミドルウェアの組み合わせにより、HttpContext.User プロパティが設定され、要求に対して認可ミドルウェアが実行されます。
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
認証スキームの詳細については、「認証の概念」を参照してください。 cookie 認証の詳細については、ASP.NET Core Identity を使わずに cookie 認証を使う方法に関するページを参照してください。
承認の適用
コントローラー、アクション、またはページに [Authorize] 属性を適用して、アプリの認証構成をテストします。 次のコードによって、認証されたユーザーへの Privacy ページへのアクセスが制限されます。
[Authorize]
public class PrivacyModel : PageModel
{
}
サインアウト
現在のユーザーをサインアウトさせてその cookie を削除するには、SignOutAsync を呼び出します。 次のコードによって、Logout
ページに Logout
ページ ハンドラーが追加されます。
public class IndexModel : PageModel
{
public async Task<IActionResult> OnPostLogoutAsync()
{
await HttpContext.SignOutAsync();
return RedirectToPage();
}
}
SignOutAsync
への呼び出しで認証スキームが指定されていないことに注目してください。 CookieAuthenticationDefaults.AuthenticationScheme
のアプリの DefaultScheme
はフォールバックとして使用されます。
その他の技術情報
ASP.NET Core
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示