1. 程式人生 > >IdentityServer(12)- 使用 ASP.NET Core Identity

IdentityServer(12)- 使用 ASP.NET Core Identity

原文: IdentityServer(12)- 使用 ASP.NET Core Identity

IdentityServer具有非常好的擴充套件性,其中使用者及其資料(包括密碼)部分你可以使用任何想要的資料庫進行持久化。 如果需要一個新的使用者資料庫,那麼ASP.NET Core Identity是你的一個選擇。 本快速入門介紹瞭如何將ASP.NET Core Identity 和 IdentityServer4一起使用。

在閱讀這篇文章是,希望你能把前面的文章全部看一遍,瞭解基本使用和相關的理論。 這個快速入門使用ASP.NET Core Identity的方法是從Visual Studio中的ASP.NET Core Identity模板建立一個新專案。 這個新的專案將取代之前在之前的快速入門中從頭開始構建的IdentityServer專案。 此解決方案中的所有其他專案(對於客戶端和API)將保持不變。

建立ASP.NET Identity新專案

第一步是為您的解決方案新增一個ASP.NET Core Identity的新專案。 鑑於ASP.NET Core Identity需要大量程式碼,因此使用Visual Studio中的模板是最好的。 你最終將刪除IdentityServer的舊專案,但有幾個專案需要遷移(或按照之前的快速入門所述從頭開始重新編寫)。

建立一個ASP.NET Core Web應用程式

然後選擇Web應用程式(MVC)

然後點選“更改身份驗證”按鈕,選擇“個人使用者賬戶”

最後,你的設定應該是和下圖一樣:

修改hosting

不要忘記修改hosting以在埠5000上執行。這非常重要,這將關係到繼續使用現有的客戶端和API專案。

新增IdentityServer元件

新增IdentityServer4.AspNetIdentity NuGet包。

Scopes 和 Clients 配置

儘管這是IdentityServer的一個新專案,但我們仍然需要與之前的快速入門一樣的配置Scopes 和 Clients。 將之前快速入門的配置類(在Config.cs中)複製到此新專案中。

對於現在的配置需要改變的是禁用MVC客戶端的許可。 我們還沒有複製之前的IdentityServer專案的許可程式碼,所以現在對MVC客戶端進行一次修改,並設定RequireConsent = false

new Client
{
    ClientId = "mvc",
    ClientName = "MVC Client",
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

    RequireConsent = false,

    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    RedirectUris           = { "http://localhost:5002/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        "api1"
    },
    AllowOfflineAccess = true
}

配置IdentityServer

和以前一樣,IdentityServer需要在Startup.cs的ConfigureServices和Configure中進行配置。

ConfigureServices

以前我們使用AddTestUsers擴充套件方法用於註冊使用者,但在這種現在的解決方案下,我們用AddAspNetIdentity替換該擴充套件方法來使用ASP.NET Identity使用者。AddAspNetIdentity擴充套件方法需要一個通用引數,它是你的ASP.NET Ientity使用者型別(與模板中的AddIdentity方法一樣)

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    // Add application services.
    services.AddTransient<IEmailSender, EmailSender>();

    services.AddMvc();

    // configure identity server with in-memory stores, keys, clients and scopes
    services.AddIdentityServer()
        .AddDeveloperSigningCredential()
        .AddInMemoryPersistedGrants()
        .AddInMemoryIdentityResources(Config.GetIdentityResources())
        .AddInMemoryApiResources(Config.GetApiResources())
        .AddInMemoryClients(Config.GetClients())
        .AddAspNetIdentity<ApplicationUser>();
}

我們在將Asp.Net Identity新增到DI容器中時,一定要把註冊IdentityServer放在Asp.Net Identity之後,因為註冊IdentityServer會覆蓋Asp.Net Identity的一些配置,這個非常重要。

Configure

使用UseIdentityServer代替了對UseIdentity的呼叫

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    // app.UseAuthentication(); // not needed, since UseIdentityServer adds the authentication middleware
    app.UseIdentityServer();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

建立使用者資料庫

鑑於這是一個新的ASP.NET Identity專案,您將需要建立資料庫。 您可以通過從專案目錄執行命令提示符並執行dotnet ef database update -c ApplicationDbContext來完成此操作:

在VS程式包控制檯使用命令也是一樣的Update-Database

建立使用者

此時,您應該能夠執行專案並在資料庫中建立/註冊使用者。 啟動應用程式,並從主頁點選“Register”連結:

並在註冊頁面上建立一個新的使用者帳戶:

現在你有一個使用者帳戶,你應該可以登入,使用客戶端,並呼叫API。

在MVC客戶端登入

啟動MVC客戶端應用程式,你應該能夠點選“Secure”連結登入。

您應該被重定向到ASP.NET Identity登入頁面。 用新建立的使用者登入:

登入後,您應該跳過同意頁面(給出我們上面所做的更改),並立即重定向到MVC客戶端應用程式,會顯示你的使用者資訊。

您還應該能夠單擊“Call API using application identity”來呼叫API:

現在,您已經從ASP.NET Ientity的使用者登入。

本文程式碼:https://github.com/IdentityServer/IdentityServer4.Samples/tree/release/Quickstarts/6_AspNetIdentity
原文:https://identityserver4.readthedocs.io/en/release/quickstarts/6_aspnet_identity.html