【转载】Identity Server 4 从入门到落地(七)—— 控制台客户端

Identity Server 4 从入门到落地(七)—— 控制台客户端

  创建Identity Server 4的控制台客户端

前面的部分:
Identity Server 4 从入门到落地(一)—— 从IdentityServer4.Admin开始
Identity Server 4 从入门到落地(二)—— 理解授权码模式
Identity Server 4 从入门到落地(三)—— 创建Web客户端
Identity Server 4 从入门到落地(四)—— 创建Web Api
Identity Server 4 从入门到落地(五)—— 使用Ajax 访问 Web Api
Identity Server 4 从入门到落地(六)—— 简单的单页面客户端

认证服务和管理的github地址: https://github.com/zhenl/IDS4Admin
客户端及web api示例代码的github地址:https://github.com/zhenl/IDS4ClientDemo

前面我们试验的客户端都是有最终用户参与的,也就是需要用户登录进行认证。如果项目中存在后台服务访问Web Api,这种情况下没有用户参与认证过程,就需要使用Client Credentials flow。我们创建一个简单的控制台项目试验一下。

首先在认证服务的管理应用中创建一个新的客户端,选择使用Client Credentials flow:
【转载】Identity Server 4 从入门到落地(七)—— 控制台客户端

然后设置作用域和客户端密钥,这里作用域中添加myapi,访问我们的测试Api:
【转载】Identity Server 4 从入门到落地(七)—— 控制台客户端

在我们前面的测试解决方案中增加一个新的.Net 6控制台项目,名称为IDSClientConsole,创建完成后,引入程序包IdentityModel:
【转载】Identity Server 4 从入门到落地(七)—— 控制台客户端
修改Program.cs如下:

  using IdentityModel.Client;
  using Newtonsoft.Json.Linq;
   
  await GetTokenAndCallApiAsync();
   
  static async Task GetTokenAndCallApiAsync()
  {
  // discover endpoints from metadata
  var client = new HttpClient();
  var disco = await client.GetDiscoveryDocumentAsync("http://localhost:4010");
  if (disco.IsError)
  {
  Console.WriteLine(disco.Error);
  return;
  }
   
  var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
  {
  Address = disco.TokenEndpoint,
   
  ClientId = "consoleclient",
  ClientSecret = "secret1",
  Scope = "myapi"
  });
   
  if (tokenResponse.IsError)
  {
  Console.WriteLine(tokenResponse.Error);
  return;
  }
   
  Console.WriteLine(tokenResponse.Json);
   
  // call api
  var apiClient = new HttpClient();
  apiClient.SetBearerToken(tokenResponse.AccessToken);
   
  var response = await apiClient.GetAsync("http://localhost:5153/WeatherForecast");
  if (!response.IsSuccessStatusCode)
  {
  Console.WriteLine(response.StatusCode);
  Console.WriteLine(await response.Content.ReadAsStringAsync());
  }
  else
  {
  var content = await response.Content.ReadAsStringAsync();
  Console.WriteLine(JArray.Parse(content));
  }
  }

设置解决方案的启动项目,将这个控台项目和Web Api设置为同时启动:
【转载】Identity Server 4 从入门到落地(七)—— 控制台客户端
项目启动后,控制台应用通过认证,然后访问Web Api获取数据,结果如下:
【转载】Identity Server 4 从入门到落地(七)—— 控制台客户端

到这里,我们已经试验了在Web应用、单页面应用和客户端应用中访问认证服务进行认证,还测试了认证服务对Web Api的保护,接下来准备落地,为在项目中实际使用做准备,还有如下问题需要解决:

  • 基于.Net Framework的遗留项目如何使用认证服务。
  • 现有的使用Asp.Net Core使用Identity的项目如何改造。
  • 简化客户端和Web Api的编程,将代码中写死的配置项移动到配置文件。
  • 认证服务和管理应用的多种部署方式:部署到IIS,部署到Docker容器等等。

接下来的部分我们将一一解决这些问题。

上一篇:Identity Server 4 从入门到落地(十)—— 编写可配置的客户端和Web Api


下一篇:elementui plus怎么在级联选中后关闭弹层