关于 IdentityServer4
IdentityServer4 是一个 OpenID Connect 和 OAuth 2.0 框架用于 ASP.NET Core 。IdentityServer4 在你的应用程序中集成了基于令牌认证、单点登录、API访问控制所需的所有协议和扩展点。参考
本文将使用 IdentityServer4 搭建独立认证服务器。
关于 Consul
Consul 是一个服务网格解决方案,通过服务发现、配置、功能分割提供一个全功能的控制层。这些功能可以单独使用,也可以同时使用以形成一个完整的网格服务。参考
本文将使用 Consul 注册多个服务。
关于 .Net Core
将使用 WebApi 构建多个服务
构建 IdentityServer 服务添加 ASP.Net Core Web 项目
添加空项目
在程序包管理控制台中输入:Install-Package IdentityServer4.AspNetIdentity
添加 Config.cs 文件,并添加内容如下:
``` csharp
using System.Collections.Generic;
using IdentityServer4.Models;
using IdentityServer4.Test;
namespace IdentityServer
{
public sealed class Config
{
public static IEnumerable GetApiResources()
{
return new List
{
new ApiResource("ServiceA", "ServiceA API"),
new ApiResource("ServiceB", "ServiceB API")
};
}
}
```
注意:这里添加了两个 Client ,分别为 ServiceA、ServiceB ,因此接下来将构建这两个服务。
删掉StartUp.cs文件,在Program.cs中添加内容如下:
``` csharp
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
namespace IdentityServer
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
}
```
注意:AddDeveloperSigningCredential() 方法用于添加开发时使用的 ,生产环境中不要使用该方法。在 .NET Core 2.2 中新建的 Web 项目文件 csproj 中包含了如下内容:
csharp <PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> </PropertyGroup>
这里更改
csharp <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
为或直接删除该行,这么做的原因是当值为 InProcess 时,读写 tempkey.rsa 将产生权限问题。关于 AspNetCoreHostingModel 可参考 ASP.NET Core Module 。
csharp <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
F5 启动该服务,显示如下:
在浏览器中输入 :38033/.well-known/openid-configuration ,得到以下内容
至此,一个包含两个服务认证的认证服务搭建完毕。
构建 ServiceA、ServiceB