ASP.NET Core 3.0 gRPC 身份认证和授权
一.开头聊骚
本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文。本文主要讲 ASP.NET Core 本身的认证授权和gRPC接入,认证方式采用目前主流的 JWT 结合 IdentityServer4。
二.服务端配置
我们首先需要在服务端配置认证和授权。gRPC基于此文的Demo来开始:
请务必注意中间件顺序
5.为gRPC服务启用授权
我们在 LuCatService 的 SuckingCat 方法上,加上 [Authorize]
特性,就和在MVC中一样。
测试
运行客户端调用服务端来进行测试,发现服务端返回了授权失败,客户端同样获得了错误。这证明我们的服务端配置是没有问题的
三.客户端配置
配置
客户端首先需要从 IdentityServer 申请 Token,然后在调用 gRPC 服务时传递过去,这和 HTTP Api 调用一样。
1.客户端项目安装组件 IdentityModel
获得基于 HttpClient 的和 IdentityServer 的交互的封装。
2.获取Token
// discover endpoints from metadata var client = new HttpClient(); var disco = await client.GetDiscoveryDocumentAsync("http://localhost:5000"); if (disco.IsError) { Console.WriteLine(disco.Error); return; } // request token var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest { Address = disco.TokenEndpoint, ClientId = "ro.client", ClientSecret = "secret", UserName = "alice", Password = "password", Scope = "grpc1" }); if (tokenResponse.IsError) { Console.WriteLine(tokenResponse.Error); return; } Console.WriteLine(tokenResponse.Json); Console.WriteLine("\n\n");
3.为 gRPC 客户端请求设置 Token
和 HTTP Api 调用一样,gRPC也是放在头部的
var headers = new Metadata {{"Authorization", $"Bearer {tokenResponse.Json["access_token"]}"}}; var catClient = new LuCat.LuCatClient(channel); var catReply = await catClient.SuckingCatAsync(new Empty(), headers);
主要就是在调用 SuckingCatAsync
方法时,传入了header。
测试
可以看到成功的进行了调用。
四.结束
本文所用代码地址:Demo
gRPC in Asp.Net Core :官方文档
目前学习.NET Core 最好的教程 .NET Core 官方教程
.NET Core 交流群:923036995 或 4656606 欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】支持,或请我喝杯咖啡【赞赏】,这将是我继续写作,分享的最大动力!
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!https://www.cnblogs.com/stulzq/p/11897628.html