认证
server
- http
- grpc
grpcSrv := grpc.NewServer(
grpc.Address(":9000"),
grpc.Middleware(
return []byte(testKey), nil
}),
),
)
client
- http
conn, err := http.NewClient(
context.Background(),
http.WithEndpoint("127.0.0.1:8000"),
http.WithMiddleware(
jwt.Client(func(token *jwtv4.Token) (interface{}, error) {
return []byte(serviceTestKey), nil
}),
),
)
- grpc
配置Options
WithSigningMethod()
用于配置JWT签名的算法。适用于 server
和 。
例如:
jwt.WithSigningMethod(jwtv4.SigningMethodHS256)
WithClaims()
例如:
- 配置
client
的claims
:
claims := &jwtv4.StandardClaims{}
jwt.WithClaims(func()jwtv4.Claims{return claims})
- 配置
server
的claims
:
一个简易的 ,包含了 server
和 client
的使用。
其中 client
配置的是另外一个监听了9001的服务,并且该服务的key和这里配置的 serviceTestKey
一样。
con, _ := grpc.DialInsecure(
context.Background(),
grpc.WithEndpoint("dns:///127.0.0.1:9001"), // 本地的9001服务
grpc.WithMiddleware(
jwt.Client(func(token *jwtv4.Token) (interface{}, error) {
}),
),
)
获取用户信息
带有 JWT Token
的请求,经过 server
侧的 jwt
中间件后,token
的 claims
会放进上下文 context
中。
此时使用者通过提供的接口 jwt.FromContext(ctx)
即可获取上下文中的 claims
对象,而一般用户信息是存储在 claims
里面的。使用者需要对 claims
断言后才能进一步处理,claims
类型的定义偏业务性质,和token签发的业务耦合。签发时使用的类型,这里就需要断言对应的类型。
接口原型:
结合 selector
中间件使用实现白名单机制。可参考。
签发 JWT Token
参考源码: