来源:https://docs.duendesoftware.com/
源码:https://gitee.com/XiaoJie230/blazorweb--identityserver.git
1.安装官方模板
dotnet new --install Duende.IdentityServer.Templates
2.生成一个标识服务器项目
首先创建一个解决方案
dotnet new isempty -n IdentityServer

定义API范围和绑定客户端

配置身份服务器
该模板添加了一些快速入门中未使用的内容 这边暂时无需改动 按照官方改动

修改后进入调试 进入https://localhost:5001/.well-known/openid-configuration
返回结果如图

注:首次启动时,IdentityServer 将使用其自动密钥管理功能创建签名密钥并将其存储在 keys 文件夹中。为避免意外泄露加密机密,应从源代码管理中排除整个 Keys 文件夹。如果不存在,将重新创建它。
3.创建一个WebAPI
创建一个WebApi,并且添加Nuget: Microsoft.AspNetCore.Authentication.JwtBearer

将 WT持有者身份验证服务添加到服务集合以允许依赖关系注入

在授权之前立即将身份验证中间件添加到管道中:

添加控制器
添加一个名为 IdentityController 控制器:

把映射地址改成https://localhost:6001

测试控制器
运行 API 项目,然后在浏览器中导航到标识控制器 https://localhost:6001/identity。这应该返回 401 状态代码,这意味着您的 API 需要凭据,现在受 IdentityServer 保护。

4:创建客户端项目
创建一个控制器项目

安装Nuget管理包

在program中填写内容

using IdentityModel.Client; using System.Text.Json; var client = new HttpClient(); //对来自OpenID Connect发现端点的响应进行建模 var disco = await client.GetDiscoveryDocumentAsync("https://localhost:5001"); if (disco.IsError) { Console.WriteLine("出现异常错误,原因" + disco.Error); return; } #region 从 IdentityServer 请求令牌 var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest { //和IdentityServer下的Config的配置端口一直 Address = disco.TokenEndpoint, ClientId = "client", ClientSecret = "secret", Scope = "api1" }); if (tokenResponse.IsError) { Console.WriteLine(tokenResponse.Error); return; } Console.WriteLine(tokenResponse.AccessToken); #endregion 从 IdentityServer 请求令牌 #region 调用接口 // call api var apiClient = new HttpClient(); apiClient.SetBearerToken(tokenResponse.AccessToken); var response = await apiClient.GetAsync("https://localhost:6001/identity"); if (!response.IsSuccessStatusCode) { Console.WriteLine(response.StatusCode); } else { var doc = JsonDocument.Parse(await response.Content.ReadAsStringAsync()).RootElement; Console.WriteLine(JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true })); } #endregion 调用接口
效果展示

本文来自博客园,作者:Sleepy-Person,转载请注明原文链接:https://www.cnblogs.com/Sleepy-Person/p/16184428.html
浙公网安备 33010602011771号