认证

    server

    • http
    • grpc
    1. grpcSrv := grpc.NewServer(
    2. grpc.Address(":9000"),
    3. grpc.Middleware(
    4. return []byte(testKey), nil
    5. }),
    6. ),
    7. )

    client

    • http
    1. conn, err := http.NewClient(
    2. context.Background(),
    3. http.WithEndpoint("127.0.0.1:8000"),
    4. http.WithMiddleware(
    5. jwt.Client(func(token *jwtv4.Token) (interface{}, error) {
    6. return []byte(serviceTestKey), nil
    7. }),
    8. ),
    9. )
    • grpc

    配置Options

    WithSigningMethod()

    用于配置JWT签名的算法。适用于 server 和 。

    例如:

    1. jwt.WithSigningMethod(jwtv4.SigningMethodHS256)

    WithClaims()

    例如:

    • 配置 clientclaims
    1. claims := &jwtv4.StandardClaims{}
    2. jwt.WithClaims(func()jwtv4.Claims{return claims})
    • 配置 serverclaims

    一个简易的 ,包含了 serverclient 的使用。

    其中 client 配置的是另外一个监听了9001的服务,并且该服务的key和这里配置的 serviceTestKey 一样。

    1. con, _ := grpc.DialInsecure(
    2. context.Background(),
    3. grpc.WithEndpoint("dns:///127.0.0.1:9001"), // 本地的9001服务
    4. grpc.WithMiddleware(
    5. jwt.Client(func(token *jwtv4.Token) (interface{}, error) {
    6. }),
    7. ),
    8. )

    获取用户信息

    带有 JWT Token 的请求,经过 server 侧的 jwt 中间件后,tokenclaims 会放进上下文 context 中。
    此时使用者通过提供的接口 jwt.FromContext(ctx) 即可获取上下文中的 claims 对象,而一般用户信息是存储在 claims 里面的。使用者需要对 claims 断言后才能进一步处理,claims 类型的定义偏业务性质,和token签发的业务耦合。签发时使用的类型,这里就需要断言对应的类型。

    接口原型:

      结合 selector 中间件使用实现白名单机制。可参考。

      签发 JWT Token

      参考源码: