一. 再谈认证和授权

(详见:https://www.cnblogs.com/yaopengfei/p/13141548.html)

1.认证

  是验证身份的一种机制,比如用户名和密码登录,这就是一种认证机制,再比如现在比较流行jwt校验,通过用户名和密码访问接口,验证通过获取token的过程,也叫做认证。

2.授权

  是确定你是否有权限访问系统的某些资源. 比如用户登录成功进入系统以后,要进行增加博客这个功能,系统要判断一下该用户是否有权限访问这个增加博客的功能,这个过程就叫做授权。再比如某个客户端app携带token访问服务端某个api接口,这个时候服务端要校验一下该token是否有权限访问这个api接口,这个过程也是授权。

3.Core Mvc中认证和授权

  在Core Mvc中,UseAuthentication()代表认证,UseAuthorization()代表授权, 需要注意的是这里的认证和授权 与 上述广义上的理解有点差异,在Core MVC中,UseAuthentication和UseAuthorization一般是成对出现,且UseAuthentication认证需要写在上面,且需要在对应的api接口上加[Authorize],代表该接口需要校验, 这样当该接口被请求的时候,才会走UseAuthentication中的认证逻辑。

(PS: 这里UseAuthentication + UseAuthorization 等于上面 广义上的授权)

举例:

  下面的grpc的jwt校验,获取token的过程是认证,携带token请求api接口看是否能请求通过的过程是授权。

  在携带token请求api接口的过程中,Core Mvc中同时开启了UseAuthentication 和 UseAuthorization,只有当接口上有[Authorize]特性,才会走UseAuthentication里的认证逻辑; 也就是说如果api接口上没有[Authorize]特性,该接口可以被随意访问,不会走UseAuthentication中的验证逻辑哦.

 

二. 基于JWT模式

1. 项目准备

 GrpcServer1 服务端(自身集成认证和授权)

 MyClient1 客户端(控制台)

2. 服务端搭建

 (1).新建ticket.proto文件,声明方法GetAvailableTickets和BuyTickets,并对其添加链接引用

代码如下:

syntax = "proto3";
import "google/protobuf/empty.proto";
package ticket;

// The banker service definition.
service Ticketer {
  //获取剩余票数( 请求参数为空)
  rpc GetAvailableTickets (google.protobuf.Empty) returns (AvailableTicketsResponse);
  //买票
  rpc BuyTickets (BuyTicketsRequest) returns (BuyTicketsResponse);
}
message AvailableTicketsResponse {
  int32 count = 1;
}
message BuyTicketsRequest {
  int32 count = 1;
}
message BuyTicketsResponse {
  bool success = 1;
}
View Code

相关文章:

  • 2022-02-18
  • 2021-09-03
  • 2022-12-23
  • 2019-10-22
  • 2022-12-23
  • 2021-10-07
  • 2022-12-23
猜你喜欢
  • 2019-11-20
  • 2021-12-04
  • 2022-01-21
  • 2021-11-03
  • 2021-10-14
  • 2022-02-09
  • 2021-07-31
相关资源
相似解决方案