前言
前面写了两篇IdentityServer4文章,一篇是资源服务器创建(.NET Core集成Identityserver4),一篇是服务集成IdentityServer4认证(Asp.Net Core服务集成Identityserver4认证),测试都是postman工具进行测试的,今天编程控制台来演示请求的相关流程。代码框架环境Asp.net Core 3.1
提示:博主文章仅用于学习、研究和交流目的,不足和错误之处在所难免,希望大家能够批评指出,博主核实后马上更改。
一、使用步骤
1.创建一个控制台程序,进行消费,名称为OrderCounsumerk
2.引入IdentityModel 库 4.4.0
3.代码编写
- 客户端模式
代码如下(示例):
var client = new HttpClient();
var response = client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = "http://localhost:5000/connect/token",
ClientId = "client",
ClientSecret = "secret",
Scope = "api"
}).Result;
Console.WriteLine("=============================Token==============================");
Console.WriteLine(response.AccessToken ?? response.Error);
Console.WriteLine("=============================Token==============================");
// 调用API
client.SetBearerToken(response.AccessToken);
var responses = client.GetAsync("http://localhost:5001/weatherforecast/get").Result;
if (response.IsError)
{
Console.WriteLine(response.HttpStatusCode);
}
else
{
Console.WriteLine("=============================服务返回值==============================");
var content = responses.Content.ReadAsStringAsync().Result;
Console.WriteLine(content);
}
Console.WriteLine("Hello World!");
Console.ReadKey();
- 密码模式
代码如下(示例):
var client = new HttpClient();
var response = client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
Address = "http://localhost:5000/connect/token",
ClientId = "apiClientPassword",
ClientSecret = "apiSecret",
Scope = "secretapi",
UserName="123",
Password="123"
}).Result;
Console.WriteLine("=============================Token==============================");
Console.WriteLine(response.AccessToken ?? response.Error);
Console.WriteLine("=============================Token==============================");
// 调用API
client.SetBearerToken(response.AccessToken);
var responses = client.GetAsync("http://localhost:5001/weatherforecast/get").Result;
if (response.IsError)
{
Console.WriteLine(response.HttpStatusCode);
}
else
{
Console.WriteLine("=============================服务返回值==============================");
var content = responses.Content.ReadAsStringAsync().Result;
Console.WriteLine(content);
}
Console.WriteLine("Hello World!");
Console.ReadKey();
- 刷新refresh_token
代码如下(示例):
var client = new HttpClient();
var response = client.RequestPasswordTokenAsync(new PasswordTokenRequest
{
Address = "http://localhost:5000/connect/token",
ClientId = "apiClientPassword",
ClientSecret = "apiSecret",
Scope = "secretapi",
UserName="123",
Password="123"
}).Result;
Console.WriteLine("=============================Token==============================");
Console.WriteLine(response.AccessToken ?? response.Error);
Console.WriteLine("=============================Token==============================");
// 调用API
client.SetBearerToken(response.AccessToken);
var responses = client.GetAsync("http://localhost:5001/weatherforecast/get").Result;
if (response.IsError)
{
Console.WriteLine(response.HttpStatusCode);
}
else
{
Console.WriteLine("=============================服务返回值==============================");
var content = responses.Content.ReadAsStringAsync().Result;
Console.WriteLine(content);
}
Console.WriteLine("Hello World!");
Console.ReadKey();
4.运行效果
-
客户端模式
-
密码模式
-
刷新refresh_token