建设高端网站需要多少钱,查看自己电脑的网站开发语言,新产品上市的营销策划方案,wordpress 仿站#xff08;此岁只能云赏樱了#xff09;书接上文#xff0c;这些天一直在研究IdentityServer4#xff08;下文简称Ids4#xff09;框架#xff0c;发现有很多有意思#xff0c;或者说比我想象中的知识点#xff0c;可扩展的多#xff0c;所以比较开心能钻研进去… 此岁只能云赏樱了书接上文这些天一直在研究IdentityServer4下文简称Ids4框架发现有很多有意思或者说比我想象中的知识点可扩展的多所以比较开心能钻研进去就像当时学习ASP.NET Core一样越学越感觉有意思的我自认为ASP.NET Core已经学的基本出师了希望Ids4我也能学到出师毕竟要干一件事就要做好它。在之前的公众号文章中呢我已经对多个客户端进行了迁移比如JS模式MVC模式【实战 Ids4】║ 客户端、服务端、授权中心全线打通【实战 Ids4】║ 又一个项目迁移完成MVC在我的开篇讲中一共说到了平时开发常见的模式有以下几个简化模式和授权码模式已经说完了分别对应了JS客户端和MVC客户端那今天就说一下第三种密码授权模式——控制台调用之前之所以没说是因为太简单了那今天正好配合着Ocelot 网关一起讲讲也不算滥竽充数。正文开始。1、认证中心配置客户端这一步很简单我们只需要增加一个Client即可 // 控制台客户端 密码模式new Client{ClientId Console,ClientSecrets { new Secret(secret.Sha256()) },AllowedGrantTypes new Liststring(){GrantTypes.ResourceOwnerPasswordAndClientCredentials.FirstOrDefault(),},AllowedScopes new Liststring{blog.core.api}}
简单来说是允许一个名为Console的客户端使用密码模式通过我们的认证中心来访问blog.core.api的资源服务器具体什么意思相信应该都能看的懂这里不赘述。2、创建控制台客户端上边我们已经配置好下边我们就直接创建对应的客户端来测试吧。打开vs2019创建NetCore的控制台应用程序创建好后引用 IdentityModel Nuget包 ItemGroupPackageReference IncludeIdentityModel Version4.1.1 //ItemGroup
接下来就是简单写代码了 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,// 客户端idScope blog.core.api,// 对应的受保护资源服务器idClientSecret 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、开启三端联调测试这里的三端分别是认证中心、资源服务器、还有刚刚创建的控制台。这里肯定没问题我简单放两个结果图获取到了token访问资源服务器返回结果为表示正确性我这里贴出来api确实是加密的那现在我们的控制台密码授权模式已经说完了那接下来就简单说一下如果使用Ocelot来实现api网关吧。4、创建Ocelot API网关再创建一个空的API项目端口设置3000添加配置数据{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包ItemGroupPackageReference IncludeOcelot Version14.1.0 /
/ItemGroup
注册服务和添加中间件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();});}
我们发起请求访问当然这是很正常的证明我们已经成功的把资源服务器的8081交给了3000的Ocelot网关了。5、修改控制台请求刚刚我们的控制台客户端请求的是资源服务器那我们现在改成API网关看是否依然可以没错依然是可行的。到了这里我们已经成功的学会了1、如何使用密码授权模式2、如何控制台客户端发起请求3、如何使用Ocelost API网关4、如何基于网关进行Ids4的授权认证操作好啦今天就到这里吧窗外阳光明媚春暖花开。