scanner 获取控制台信息_【实战 Ids4】 控制台密码模式搭配Ocelot网关

4740f2cf732cbb0ffbe4de062ea8ccdd.png

(此岁只能云赏樱了)

书接上文,这些天一直在研究IdentityServer4(下文简称Ids4)框架,发现有很多有意思,或者说比我想象中的知识点,可扩展的多,所以比较开心能钻研进去,就像当时学习ASP.NET Core一样,越学越感觉有意思的,我自认为ASP.NET Core已经学的基本出师了,希望Ids4我也能学到出师,毕竟要干一件事就要做好它。

在之前的公众号文章中呢,我已经对多个客户端进行了迁移,比如JS模式,MVC模式:

【实战 Ids4】║ 客户端、服务端、授权中心全线打通!

【实战 Ids4】║ 又一个项目迁移完成(MVC)

在我的开篇讲中,一共说到了平时开发常见的模式有以下几个:

babb69bda1889eff60e4cf2d5bd8fa79.png

简化模式和授权码模式已经说完了,分别对应了JS客户端和MVC客户端,那今天就说一下第三种密码授权模式——控制台调用,之前之所以没说,是因为太简单了,那今天正好配合着Ocelot 网关一起讲讲,也不算滥竽充数。

正文开始。

1、认证中心配置客户端

这一步很简单,我们只需要增加一个Client即可:

 // 控制台客户端 密码模式 new Client {     ClientId = "Console",     ClientSecrets = { new Secret("secret".Sha256()) },     AllowedGrantTypes = new List()     {         GrantTypes.ResourceOwnerPasswordAndClientCredentials.FirstOrDefault(),     },     AllowedScopes = new List     {         "blog.core.api"     } }

简单来说,是允许一个名为Console的客户端,使用密码模式,通过我们的认证中心,来访问blog.core.api的资源服务器,具体什么意思,相信应该都能看的懂,这里不赘述。

2、创建控制台客户端

上边我们已经配置好,下边我们就直接创建对应的客户端来测试吧。

打开vs2019,创建NetCore的控制台应用程序

34ac31892ae8f24da90d86bb0763155e.png

创建好后,引用 IdentityModel Nuget包

     

接下来,就是简单写代码了

 static async Task Main(string[] args) {     using var client = new HttpClient();     var discoResponse = await client.GetDiscoveryDocumentAsync("http://localhost:5004");     if (discoResponse.IsError)     {         Console.WriteLine(discoResponse.Error);         return;     }     var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest     {         Address = discoResponse.TokenEndpoint,         ClientId = "Console",// 客户端id         Scope = "blog.core.api",// 对应的受保护资源服务器id         ClientSecret = "secret",         UserName = "laozhang",// 这里的用户名密码,是我SeedData的时候导入的         Password = "BlogIdp123$InitPwd"     });     if (tokenResponse.IsError)     {         Console.WriteLine(tokenResponse.Error);         return;     }     Console.WriteLine(tokenResponse.Json);     client.SetBearerToken(tokenResponse.AccessToken);     // 获取access_token后,向资源服务器发起请求     var response = await client.GetAsync("http://localhost:8081/api/blog/1");     Console.WriteLine(response.IsSuccessStatusCode ?         $"{response.StatusCode} {await response.Content.ReadAsStringAsync()}" :         response.StatusCode.ToString()); }

我已经对部分地方加了注释,相信你应该能看的懂,简单来说,就是通过账号信息向Ids4认证中心(5004)发起请求,获取到access_token,然后带上这个token向资源服务器(8081)发起请求,没错就是我们的Blog.Core项目,注意这个代码是is4分支的,不是master的。

然后还要注意Blog.Core的授权地址要改成localhost:5004,而不是ids.neters.club。

    "ApiName": "Blog.Core",    "IdentityServer4": {      "AuthorizationUrl": "https://ids.neters.club"    }
3、开启三端,联调测试

这里的三端分别是:认证中心、资源服务器、还有刚刚创建的控制台。

这里肯定没问题,我简单放两个结果图:

c2e0a2cb6deb66b8fe1c2ed48c06cc5c.png

(获取到了token)

8a49856c4f79ecbb1aeeb0cac58f5a84.png

(访问资源服务器,返回结果)

9d19a698a2630118216825efcf4ce9f2.png

(为表示正确性,我这里贴出来api确实是加密的)

那现在我们的控制台密码授权模式已经说完了,那接下来就简单说一下如果使用Ocelot来实现api网关吧。

4、创建Ocelot API网关

再创建一个空的API项目,端口设置3000

c468ef51bbbf0fa59b957574e21c7f0a.png

添加配置数据

{  "Logging": {    "LogLevel": {      "Default": "Information",      "Microsoft": "Warning",      "Microsoft.Hosting.Lifetime": "Information"    }  },  "AllowedHosts": "*",  "ReRoutes": [    {      "DownstreamPathTemplate": "/api/blog/1",// 下游api项目的接口      "DownstreamScheme": "http",      "DownstreamHostAndPorts": [        {          "Host": "localhost",          "Port": 8081 // 下游api项目,可以配置多个        }      ],      "UpstreamPathTemplate": "/api/blog/1",// 自定义模板      "UpstreamHttpMethod": [ "Get" ]    }  ]}

引用Ocelot的Nuget包

  

注册服务和添加中间件

public void ConfigureServices(IServiceCollection services){    services.AddControllers();    services.AddOcelot();} public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {     app.UseRouting();     app.UseOcelot();     app.UseEndpoints(endpoints =>     {         endpoints.MapControllers();     }); }

我们发起请求访问

868482d03708189b7ec2704ee0d5dd51.png

当然,这是很正常的,证明我们已经成功的把资源服务器的8081,交给了3000的Ocelot网关了。

5、修改控制台请求

刚刚我们的控制台客户端,请求的是资源服务器,那我们现在改成API网关,看是否依然可以:

a1dfb4c159d9d58729160f251d270b20.png

没错,依然是可行的。

到了这里,我们已经成功的学会了:

1、如何使用密码授权模式;

2、如何控制台客户端发起请求;

3、如何使用Ocelost API网关;

4、如何基于网关进行Ids4的授权认证操作;

好啦,今天就到这里吧,窗外阳光明媚,春暖花开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值