IdentityServer4 开源项目教程
项目介绍
IdentityServer4 是一个基于 ASP.NET Core 的 OpenID Connect 和 OAuth 2.0 框架。它提供了一个集中式的登录逻辑和工作流程,适用于各种应用程序(如 Web、原生、移动和服务)。IdentityServer4 是 OpenID Connect 的官方认证实现,支持单点登录/登出、API 访问控制等功能。它还支持外部身份提供者,如 Azure Active Directory、Google、Facebook 等,从而保护应用程序免受连接这些外部提供者的细节影响。
项目快速启动
安装 IdentityServer4
首先,确保你已经安装了 .NET Core SDK。然后,创建一个新的 ASP.NET Core 项目并添加 IdentityServer4 包:
dotnet new web -n IdentityServerDemo
cd IdentityServerDemo
dotnet add package IdentityServer4
配置 IdentityServer4
在 Startup.cs
文件中配置 IdentityServer4:
using IdentityServer4.Models;
using IdentityServer4.Test;
using System.Collections.Generic;
using System.Security.Claims;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddInMemoryClients(Config.Clients)
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryApiResources(Config.ApiResources)
.AddTestUsers(Config.Users)
.AddDeveloperSigningCredential();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseIdentityServer();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
}
public static class Config
{
public static IEnumerable<Client> Clients =>
new List<Client>
{
new Client
{
ClientId = "client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }
}
};
public static IEnumerable<IdentityResource> IdentityResources =>
new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
};
public static IEnumerable<ApiResource> ApiResources =>
new List<ApiResource>
{
new ApiResource("api1", "My API")
};
public static List<TestUser> Users =>
new List<TestUser>
{
new TestUser
{
SubjectId = "1",
Username = "alice",
Password = "password",
Claims = new List<Claim>
{
new Claim("name", "Alice"),
new Claim("website", "https://alice.com")
}
},
new TestUser
{
SubjectId = "2",
Username = "bob",
Password = "password",
Claims = new List<Claim>
{
new Claim("name", "Bob"),
new Claim("website", "https://bob.com")
}
}
};
}
运行项目
运行项目并访问 https://localhost:5001/.well-known/openid-configuration
以查看 IdentityServer4 的配置端点。
dotnet run
应用案例和最佳实践
单点登录(SSO)
IdentityServer4 可以用于实现跨多个应用程序的单点登录。用户只需登录一次,即可访问所有支持 IdentityServer4 的应用程序。
API 访问控制
IdentityServer4 可以用于为不同类型的客户端(如服务器到服务器、Web 应用程序、SPA 和原生/移动应用)颁发访问令牌,从而保护 API。
外部身份提供者集成
IdentityServer4 支持与外部身份提供者(如 Azure Active Directory、Google、Facebook 等)集成,从而提供更广泛的身份验证选项。