IdentityServer4 项目教程
1. 项目的目录结构及介绍
IdentityServer4 是一个用于 ASP.NET Core 的 OpenID Connect 和 OAuth 2.0 框架。项目的目录结构如下:
IdentityServer4/
├── src/
│ ├── IdentityServer4/
│ │ ├── Config.cs
│ │ ├── Startup.cs
│ │ ├── ...
│ ├── IdentityServer4.AspNetIdentity/
│ ├── IdentityServer4.EntityFramework/
│ ├── ...
├── samples/
│ ├── Quickstarts/
│ │ ├── 1_ClientCredentials/
│ │ ├── 2_ResourceOwnerPassword/
│ │ ├── ...
│ ├── ...
├── tests/
│ ├── IdentityServer4.Tests/
│ ├── ...
├── docs/
│ ├── ...
├── README.md
├── LICENSE
├── ...
目录结构介绍
src/
:包含 IdentityServer4 的核心代码和相关扩展。IdentityServer4/
:核心库,包含配置、启动文件等。IdentityServer4.AspNetIdentity/
:与 ASP.NET Identity 集成的扩展。IdentityServer4.EntityFramework/
:使用 EntityFramework 进行配置和操作数据的扩展。
samples/
:包含各种示例项目,帮助用户快速上手。Quickstarts/
:快速入门示例,涵盖不同的认证和授权场景。
tests/
:包含项目的单元测试和集成测试。docs/
:包含项目的文档和教程。README.md
:项目的基本介绍和使用说明。LICENSE
:项目的开源许可证。
2. 项目的启动文件介绍
在 IdentityServer4 项目中,Startup.cs
文件是项目的启动文件,负责配置和启动 IdentityServer。
Startup.cs 文件内容
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace IdentityServer4
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
var builder = services.AddIdentityServer()
.AddInMemoryClients(Config.Clients)
.AddInMemoryIdentityResources(Config.IdentityResources)
.AddInMemoryApiResources(Config.ApiResources)
.AddInMemoryApiScopes(Config.ApiScopes)
.AddTestUsers(Config.Users);
// ... other configurations
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseIdentityServer();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
}
}
}
启动文件介绍
ConfigureServices
方法:配置 IdentityServer 服务,包括客户端、身份资源、API 资源和测试用户等。Configure
方法:配置请求处理管道,包括使用 IdentityServer 中间件和授权中间件。
3. 项目的配置文件介绍
IdentityServer4 的配置文件通常包括客户端、身份资源、API 资源和用户等配置。这些配置可以在 Config.cs
文件中找到。
Config.cs 文件内容
using IdentityServer4.Models;
using System.Collections.Generic;
namespace IdentityServer4
{
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>