外部認証のサポートの追加

次に、外部認証のサポートを追加します。これは本当に簡単です。本当に必要なのはASP.NET Core互換の認証ハンドラです。

ASP.NET Core自体は、Google、Facebook、Twitter、Microsoft Account、OpenID Connectをサポートしています。さらに、他の多くの認証プロバイダの実装をここで見つけることができます。

Googleサポートを追加する

認証にGoogleを使用できるようにするには、まずGoogleに登録する必要があります。これは開発者コンソールで行われます。新しいプロジェクトを作成し、Google+ APIを有効にして、/ signin-googleのパスをベースアドレス(http:// localhost:5000 / signin-googleなど)に追加してローカルIdentityServerのコールバックアドレスを設定します。

ポート5000で実行している場合は、下記のコードスニペットのクライアントID /シークレットを使用することができます。これは、事前に登録されているためです。

まず、DIにGoogle認証ハンドラを追加します。これは、このスニペットを次の場所ConfigureServicesに追加することで行いますStartup:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    // configure identity server with in-memory stores, keys, clients and scopes
    services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddTestUsers(Config.GetUsers());

    services.AddAuthentication()
        .AddGoogle("Google", options =>
        {
            options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

            options.ClientId = "434483408261-55tc8n0cs4ff1fe21ea8df2o443v2iuc.apps.googleusercontent.com";
            options.ClientSecret = "3gcoTrEDPPJ0ukn_aYYT6PWo";
        });
}

デフォルトでは、IdentityServerは、外部認証の結果(定数に基づくスキームを使用IdentityServerConstants.ExternalCookieAuthenticationScheme)のために特にCookieハンドラを構成します。Googleハンドラの設定では、そのCookieハンドラが使用されます。これがどのように行われたかをよりよく理解するにはAccountController、クイックスタートフォルダの下にあるクラスを参照してください。

次に、MVCクライアントを実行して認証を試みます。ログインページにGoogleのボタンが表示されます:

../_images/4_login_page.png

認証後、クレームが現在Googleデータから取得されていることがわかります。

../_images/4_external_claims.png

さらなる実験

追加の外部プロバイダを追加できます。私たちはあなたがOpenID Connectを使って統合できるIdentityServer4のクラウドホストデモ版を持っています。

DIにOpenId Connectハンドラを追加する:

services.AddAuthentication()
    .AddGoogle("Google", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;

        options.ClientId = "434483408261-55tc8n0cs4ff1fe21ea8df2o443v2iuc.apps.googleusercontent.com";
        options.ClientSecret = "3gcoTrEDPPJ0ukn_aYYT6PWo";
    })
    .AddOpenIdConnect("oidc", "OpenID Connect", options =>
    {
        options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
        options.SignOutScheme = IdentityServerConstants.SignoutScheme;

        options.Authority = "https://demo.identityserver.io/";
        options.ClientId = "implicit";

        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = "name",
            RoleClaimType = "role"
        };
    });

これで、ユーザーはクラウドホストデモIDプロバイダを使用できるようになりました。

注釈

クイックスタートUIは外部ユーザーを自動的にプロビジョニングします。外部ユーザが初めてログインすると、新しいローカルユーザが作成され、すべての外部クレームが新しいユーザにコピーされて関連付けられます。あなたがこのような状況に対処する方法は、あなた次第です。たぶん、ある種の登録UIを最初に表示したいと思うかもしれません。デフォルトのクイックスタートのソースコードは、ここで見つけることができます。自動プロビジョニングが実行されるコントローラは、ここで見つけることができます。