随笔 - 26,  文章 - 0,  评论 - 3,  阅读 - 8696

来源: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 调用接口
复制代码

效果展示

 

posted on   Sleepy-Person  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示