diff --git a/all/cmd/main/main.go b/all/cmd/main/main.go index 0508873..c9e7606 100644 --- a/all/cmd/main/main.go +++ b/all/cmd/main/main.go @@ -31,7 +31,14 @@ func main() { config.New(ServiceKey) impl.NewImpl() - srv := allserver.New() + srv, err := allserver.New( + config.Spec.Authorization.Key, + config.Spec.Authorization.Expire, + config.Spec.Authorization.Anonymous, + ) + if err != nil { + panic(err) + } if err := service.Expose(srv); err != nil { panic(err) } @@ -45,7 +52,7 @@ func main() { _ = srv.Stop(ctx) }() - if err := srv.Start(config.Spec.Server.GRPC.Addr, config.Spec.Server.HTTP.Addr, config.Spec.DynamicRPC.Allow); err != nil && err != http.ErrServerClosed { + if err := srv.Start(config.Spec.Server.GRPC.Addr, config.Spec.Server.HTTP.Addr); err != nil && err != http.ErrServerClosed { panic(err) } } diff --git a/all/etc/default_dev.yaml b/all/etc/default_dev.yaml index 6369ca3..336919f 100644 --- a/all/etc/default_dev.yaml +++ b/all/etc/default_dev.yaml @@ -7,12 +7,6 @@ Server: BindIP: 0.0.0.0 Port: 12001 -# Dynamic JSON-to-protobuf unary RPC endpoint: POST /rpc/{module}/{service}/{method} -# An empty allow list denies every dynamic call. Use "*" to expose all -# reflection-visible unary methods, or list full service/method names. -DynamicRPC: - Allow: - - "*" Databases: Driver: postgres @@ -22,6 +16,32 @@ Databases: Cache: redis://null:Weidong1214@127.0.0.1:6379/1 SecretKey: CHANGE_ME +# Authorization contains the HS256 signing key and maximum token lifetime in +# seconds. Clients send the raw JWT in the Authorization header (no Bearer). +Authorization: + Key: CHANGE_ME_32_BYTE_JWT_SECRET_KEY + Expire: 86400 + Anonymous: + - /passport.Login/Pwd + - /passport.Login/Code + - /passport.Login/Quick + - /passport.Register/Pwd + - /passport.Register/Code + - /passport.Forget/Verify + - /passport.Forget/Reset + - /passport.Verify/Request + - /passport.Verify/JumioCallback + - /market.Agency/Login + - /mall.Staff/Login + - /rest/fts/ping + - /rest/fts/config + - /rest/logs/ping + - /rest/mgt/ping + - /rest/mgt/session + - /rest/mgt/login + - /rest/mgt/refresh + - /rest/mgt/reset + # Enabled services. Use "all" to enable every registered service. Services: - ads diff --git a/all/go.mod b/all/go.mod index a1f54e3..3390aa5 100644 --- a/all/go.mod +++ b/all/go.mod @@ -52,7 +52,6 @@ require golang.org/x/net v0.57.0 // indirect require ( filippo.io/edwards25519 v1.2.0 // indirect - github.com/KyleBanks/depth v1.2.1 // indirect github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect github.com/alibabacloud-go/darabonba-openapi/v2 v2.2.4 // indirect github.com/alibabacloud-go/debug v1.0.1 // indirect @@ -72,16 +71,6 @@ require ( github.com/gabriel-vasile/mimetype v1.4.15 // indirect github.com/gin-contrib/cors v1.7.7 // indirect github.com/gin-contrib/sse v1.1.1 // indirect - github.com/go-openapi/jsonpointer v1.0.0 // indirect - github.com/go-openapi/jsonreference v1.0.0 // indirect - github.com/go-openapi/spec v0.22.9 // indirect - github.com/go-openapi/swag/conv v0.28.0 // indirect - github.com/go-openapi/swag/jsonutils v0.28.0 // indirect - github.com/go-openapi/swag/loading v0.28.0 // indirect - github.com/go-openapi/swag/pools v0.28.0 // indirect - github.com/go-openapi/swag/stringutils v0.28.0 // indirect - github.com/go-openapi/swag/typeutils v0.28.0 // indirect - github.com/go-openapi/swag/yamlutils v0.28.0 // indirect github.com/go-pay/crypto v0.0.1 // indirect github.com/go-pay/errgroup v0.0.3 // indirect github.com/go-pay/gopay v1.5.122 // indirect @@ -95,7 +84,7 @@ require ( github.com/go-sql-driver/mysql v1.10.0 // indirect github.com/goccy/go-json v0.10.6 // indirect github.com/goccy/go-yaml v1.19.2 // indirect - github.com/golang-jwt/jwt/v5 v5.3.1 // indirect + github.com/golang-jwt/jwt/v5 v5.3.1 github.com/golang/protobuf v1.5.4 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/context v1.1.2 // indirect @@ -128,9 +117,6 @@ require ( github.com/rs/xid v1.6.0 // indirect github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect github.com/spf13/cast v1.10.0 // indirect - github.com/swaggo/files v1.0.1 // indirect - github.com/swaggo/gin-swagger v1.6.1 // indirect - github.com/swaggo/swag v1.16.6 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.155 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.3.155 // indirect github.com/tinylib/msgp v1.6.4 // indirect @@ -146,11 +132,9 @@ require ( go.uber.org/zap v1.28.0 // indirect golang.org/x/arch v0.30.0 // indirect golang.org/x/crypto v0.54.0 // indirect - golang.org/x/mod v0.38.0 // indirect golang.org/x/sync v0.22.0 // indirect golang.org/x/sys v0.47.0 // indirect golang.org/x/text v0.40.0 // indirect - golang.org/x/tools v0.48.0 // indirect google.golang.org/genproto v0.0.0-20260807164820-c8921c73eeea google.golang.org/genproto/googleapis/api v0.0.0-20260807164820-c8921c73eeea // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260807164820-c8921c73eeea // indirect diff --git a/all/go.sum b/all/go.sum index 23fe416..6b0dbff 100644 --- a/all/go.sum +++ b/all/go.sum @@ -2,8 +2,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= -github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6 h1:eIf+iGJxdU4U9ypaUfbtOWCsZSbTb8AUHvyPrxu6mAA= github.com/alibabacloud-go/alibabacloud-gateway-pop v0.0.6/go.mod h1:4EUIoxs/do24zMOGGqYVWgw0s9NtiylnJglOeEB5UJo= github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= @@ -94,8 +92,6 @@ github.com/gabriel-vasile/mimetype v1.4.15 h1:05iP/CYtZ/w455R/KZM6rZ5ieAdh99UPtd github.com/gabriel-vasile/mimetype v1.4.15/go.mod h1:azpTcoLcDZRNgFou5j+APrqQx9HqVPWa6ijYQIIVswQ= github.com/gin-contrib/cors v1.7.7 h1:Oh9joP463x7Mw72vhvJ61YQm8ODh9b04YR7vsOErD0Q= github.com/gin-contrib/cors v1.7.7/go.mod h1:K5tW0RkzJtWSiOdikXloy8VEZlgdVNpHNw8FpjUPNrE= -github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= -github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/sessions v1.1.0 h1:00mhHfNEGF5sP2fwxa98aRqj1FOJdL6IkR86n2hOiBo= github.com/gin-contrib/sessions v1.1.0/go.mod h1:TyYZDIs6qCQg2SOoYPgMT9pAkmZceVNEJMcv5qbIy60= github.com/gin-contrib/sse v1.1.1 h1:uGYpNwTacv5R68bSGMapo62iLTRa9l5zxGCps4hK6ko= @@ -106,33 +102,6 @@ github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v1.0.0 h1:kR9tHqY0CtZaOPVFm622dPVNhrvYpwr4uCxgL3h1H8s= -github.com/go-openapi/jsonpointer v1.0.0/go.mod h1:Z3rw7dWu1p9IgitXCFamSlA5lmDiklEB6vkaxcNZW5Y= -github.com/go-openapi/jsonreference v1.0.0 h1:jlmTr6torcd1YgDQvSfNmRtKzYDO4FGBkrAdlAVWnpY= -github.com/go-openapi/jsonreference v1.0.0/go.mod h1:jtwdyGbJk0Xhe5Y+rwtglQP6Sb1WZST4rT32LWB+sv0= -github.com/go-openapi/spec v0.22.9 h1:/vKIFDcGKp0ktZWGbym/tJEWbk6/XOEmAVU0kqKMH+w= -github.com/go-openapi/spec v0.22.9/go.mod h1:b/mNUYIOQOyIiUzUzXEE8xzyZqf93KvM9hQGP91yfl0= -github.com/go-openapi/swag v0.28.0 h1:xkgbOSKj6DZziNpyqRRAOt3GJGtgjgsd2RoyT30VWuw= -github.com/go-openapi/swag/conv v0.28.0 h1:GtqqbyFe7vR5Y7ehxG9W6/OvrSFdf1OLeTGp40TqxH8= -github.com/go-openapi/swag/conv v0.28.0/go.mod h1:mbUE+mzctnhxi864m0Q07SpN8OowD9JhxmxuYvZZD/k= -github.com/go-openapi/swag/jsonutils v0.28.0 h1:YIch6FwO7RXzeAnbO8Tu7dWBZeUEH+4nA0HXltVTnv4= -github.com/go-openapi/swag/jsonutils v0.28.0/go.mod h1:CYM3WlTUcagR2ZoHdz54di/cbBqt82tuxuXgAjxw+mg= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.28.0 h1:qV+VVUAx5Oro8WjVWpZeql7YReTKhT4smR4zhcOQZr0= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.28.0/go.mod h1:mofwUWx70wvskwESqRJ//k/9kURmCgyJl5m5Ppoh5kY= -github.com/go-openapi/swag/loading v0.28.0 h1:td8QZdZC9MIYGGSnSPKShKiK22I2tU5UQvuUhIBPRLU= -github.com/go-openapi/swag/loading v0.28.0/go.mod h1:rXB0QiQX5mMveXEA7ouM4KiiM9jVJe4K6BVbwhD1M4k= -github.com/go-openapi/swag/pools v0.28.0 h1:HPMZWSAfce3rdVTFcjFiCIBtDg9h4x2QlRrHipwhxeU= -github.com/go-openapi/swag/pools v0.28.0/go.mod h1:kVQefhSK5RWuRe7BXsL8htgBPAMpN7HDGpGEknqugeE= -github.com/go-openapi/swag/stringutils v0.28.0 h1:ixsc9iYgDPubHL/8nSkbnryEHpD2VRlBMLKpQyPXcDU= -github.com/go-openapi/swag/stringutils v0.28.0/go.mod h1:lzRN95CxXmA03XcDWHLOb6nOMcxCqR5rGY0lOgsfRoM= -github.com/go-openapi/swag/typeutils v0.28.0 h1:nRBKSBXjDgf01VDPB3fWeD9nQuhCOVeIYAkUx2tbkyY= -github.com/go-openapi/swag/typeutils v0.28.0/go.mod h1:Srm0xFNRZ1Y+vCxJclo5qzx8aj+1pAKda/YfFPrG0dQ= -github.com/go-openapi/swag/yamlutils v0.28.0 h1:TV3JXH6DS46KUroDtMLAYHGkdWf5VDq3wVWFirmzROY= -github.com/go-openapi/swag/yamlutils v0.28.0/go.mod h1:x0q/yndZHEgk9Rx3DyDqzFUmHy55KTvIZldvF2dTJXs= -github.com/go-openapi/testify/enable/yaml/v2 v2.6.0 h1:gGHwAJ0R/5jU8BEGDbfRNR3hL68dAVi84WuOApp29B0= -github.com/go-openapi/testify/enable/yaml/v2 v2.6.0/go.mod h1:tY+St1SGq4NFl0QIqdTY4aEdbChAHxhyB77XQi9iJCo= -github.com/go-openapi/testify/v2 v2.6.0 h1:5PKH2HE7YJ/LuRPQGvSxBRlFXNQhSetBLlGAgUEu3ug= -github.com/go-openapi/testify/v2 v2.6.0/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= github.com/go-pay/crypto v0.0.1 h1:B6InT8CLfSLc6nGRVx9VMJRBBazFMjr293+jl0lLXUY= github.com/go-pay/crypto v0.0.1/go.mod h1:41oEIvHMKbNcYlWUlRWtsnC6+ASgh7u29z0gJXe5bes= github.com/go-pay/errgroup v0.0.3 h1:DB4s8e8oWYDyETKQ1y1riMJ7y29zE1uIsMCSjEOFSbU= @@ -295,12 +264,6 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= -github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= -github.com/swaggo/gin-swagger v1.6.1 h1:Ri06G4gc9N4t4k8hekMigJ9zKTFSlqj/9paAQCQs7cY= -github.com/swaggo/gin-swagger v1.6.1/go.mod h1:LQ+hJStHakCWRiK/YNYtJOu4mR2FP+pxLnILT/qNiTw= -github.com/swaggo/swag v1.16.6 h1:qBNcx53ZaX+M5dxVyTrgQ0PJ/ACK+NzhwcbieTt+9yI= -github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4Xesg= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.155 h1:142i5n5u0TcSyJM8YrQNPq1owhD7cXMvvWM45+BcrK0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.155/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.3.155 h1:MbrQONH8U74mKsa9aRhEnTYNhJBQfnGHQKMN8OEp9aE= @@ -381,8 +344,6 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= -golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -476,8 +437,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= -golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -487,8 +446,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20260807164820-c8921c73eeea h1:EoNao6AiKb+bftjR8vFOxqtY1A4zLnvnfea+FBQicBo= -google.golang.org/genproto v0.0.0-20260807164820-c8921c73eeea/go.mod h1:MVqdGj2rFowpxM1nWJoGZmKI3TGThZsWENFz9uc4l1g= google.golang.org/genproto/googleapis/api v0.0.0-20260807164820-c8921c73eeea h1:Jifw/kjs/r3B0uszvls/m3c3tmZs2YHGM9C+rvxP9gY= google.golang.org/genproto/googleapis/api v0.0.0-20260807164820-c8921c73eeea/go.mod h1:K/+WGbmBY7aNW1HDw1fJnKYo10i0DkAX6pows00dLig= google.golang.org/genproto/googleapis/rpc v0.0.0-20260807164820-c8921c73eeea h1:kVhQEPTpKQahD5+JSBTfBB19wcgQTTjAIn45MBqnyHk= diff --git a/all/internal/config/config.go b/all/internal/config/config.go index 0a7c897..5895fbf 100644 --- a/all/internal/config/config.go +++ b/all/internal/config/config.go @@ -4,6 +4,7 @@ import ( "net" "os" "strings" + "time" ftsService "bsm/full/module/base/fts/service" mgtService "bsm/full/module/base/mgt/service" @@ -11,24 +12,26 @@ import ( senderService "bsm/full/module/base/sender/service" walletService "bsm/full/module/finance/wallet/service" "git.apinb.com/bsm-sdk/core/conf" + "git.apinb.com/bsm-sdk/core/env" "git.apinb.com/bsm-sdk/core/printer" + coreVars "git.apinb.com/bsm-sdk/core/vars" ) type SrvConfig struct { - conf.Base `yaml:",inline"` - Server ServerConfig `yaml:"Server"` - DynamicRPC DynamicRPCConfig `yaml:"DynamicRPC"` - Databases *conf.DBConf `yaml:"Databases"` - MicroService *conf.MicroServiceConf `yaml:"MicroService"` - Rpc map[string]conf.RpcConf `yaml:"Rpc"` - Apm *conf.ApmConf `yaml:"APM"` - Etcd *conf.EtcdConf `yaml:"Etcd"` - Services []string `yaml:"Services"` - Fts *ftsService.Config `yaml:"Fts"` - Mgt *mgtService.Config `yaml:"Mgt"` - Passport *passportService.Config `yaml:"Passport"` - Sender *senderService.Config `yaml:"Sender"` - Wallet *walletService.Config `yaml:"Wallet"` + conf.Base `yaml:",inline"` + Server ServerConfig `yaml:"Server"` + Authorization AuthorizationConfig `yaml:"Authorization"` + Databases *conf.DBConf `yaml:"Databases"` + MicroService *conf.MicroServiceConf `yaml:"MicroService"` + Rpc map[string]conf.RpcConf `yaml:"Rpc"` + Apm *conf.ApmConf `yaml:"APM"` + Etcd *conf.EtcdConf `yaml:"Etcd"` + Services []string `yaml:"Services"` + Fts *ftsService.Config `yaml:"Fts"` + Mgt *mgtService.Config `yaml:"Mgt"` + Passport *passportService.Config `yaml:"Passport"` + Sender *senderService.Config `yaml:"Sender"` + Wallet *walletService.Config `yaml:"Wallet"` } type ListenerConfig struct { @@ -42,8 +45,10 @@ type ServerConfig struct { HTTP ListenerConfig `yaml:"HTTP"` } -type DynamicRPCConfig struct { - Allow []string `yaml:"Allow"` +type AuthorizationConfig struct { + Key string `yaml:"Key"` + Expire int64 `yaml:"Expire"` + Anonymous []string `yaml:"Anonymous"` } var Spec SrvConfig @@ -55,6 +60,18 @@ func New(serviceKey string) { if Spec.Server.GRPC.Addr == Spec.Server.HTTP.Addr { panic("gRPC and HTTP listeners must use different addresses") } + if strings.TrimSpace(Spec.Authorization.Key) == "" { + panic("Authorization.Key must not be empty") + } + keyLength := len(Spec.Authorization.Key) + if keyLength != 16 && keyLength != 24 && keyLength != 32 { + panic("Authorization.Key must contain 16, 24, or 32 bytes") + } + if Spec.Authorization.Expire <= 0 { + panic("Authorization.Expire must be greater than zero") + } + env.NewEnv().JwtSecretKey = Spec.Authorization.Key + coreVars.JwtExpire = time.Duration(Spec.Authorization.Expire) * time.Second // Keep the embedded base address meaningful for module configurations that // still consume it, while all itself uses the two explicit listeners. Spec.BindIP, Spec.Port, Spec.Addr = Spec.Server.HTTP.BindIP, Spec.Server.HTTP.Port, Spec.Server.HTTP.Addr diff --git a/all/internal/config/config_test.go b/all/internal/config/config_test.go index 349418b..9e1f352 100644 --- a/all/internal/config/config_test.go +++ b/all/internal/config/config_test.go @@ -23,8 +23,12 @@ func TestAllDevConfig(t *testing.T) { if cfg.Server.GRPC.Port == "" || cfg.Server.HTTP.Port == "" || cfg.Server.GRPC.Port == cfg.Server.HTTP.Port { t.Fatal("separate gRPC and HTTP ports are required") } - if len(cfg.DynamicRPC.Allow) == 0 { - t.Fatal("dynamic RPC allow list must be explicit") + if cfg.Authorization.Key == "" || cfg.Authorization.Expire <= 0 { + t.Fatal("authorization key and expiration are required") + } + keyLength := len(cfg.Authorization.Key) + if keyLength != 16 && keyLength != 24 && keyLength != 32 { + t.Fatal("authorization key must be compatible with the JWT issuer") } if cfg.Fts == nil || cfg.Mgt == nil || cfg.Passport == nil || cfg.Sender == nil || cfg.Wallet == nil { t.Fatal("service-specific configuration is incomplete") diff --git a/all/internal/server/authorization.go b/all/internal/server/authorization.go new file mode 100644 index 0000000..3e777b7 --- /dev/null +++ b/all/internal/server/authorization.go @@ -0,0 +1,123 @@ +package server + +import ( + "context" + "errors" + "fmt" + "net/http" + "path" + "strings" + "time" + + "github.com/golang-jwt/jwt/v5" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +type authorization struct { + key []byte + expire time.Duration + anonymous map[string]struct{} +} + +func newAuthorization(key string, expireSeconds int64, anonymous []string) (*authorization, error) { + key = strings.TrimSpace(key) + if key == "" { + return nil, errors.New("authorization key must not be empty") + } + if expireSeconds <= 0 { + return nil, errors.New("authorization expiration must be greater than zero") + } + allowed := make(map[string]struct{}, len(anonymous)) + for _, item := range anonymous { + if item = normalizePath(item); item != "" { + allowed[item] = struct{}{} + } + } + return &authorization{key: []byte(key), expire: time.Duration(expireSeconds) * time.Second, anonymous: allowed}, nil +} + +func (a *authorization) unaryInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) { + if !a.isAnonymous(info.FullMethod) { + values := metadata.ValueFromIncomingContext(ctx, "authorization") + if len(values) == 0 { + return nil, status.Error(codes.Unauthenticated, "authorization is required") + } + if err := a.validate(values[0]); err != nil { + return nil, status.Error(codes.Unauthenticated, err.Error()) + } + } + return handler(ctx, req) +} + +func (a *authorization) httpMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + requestPath := canonicalHTTPPath(r.URL.Path) + if !a.isAnonymous(requestPath) { + if err := a.validate(r.Header.Get("Authorization")); err != nil { + writeHTTPAuthorizationError(w, err) + return + } + } + next.ServeHTTP(w, r) + }) +} + +func (a *authorization) validate(raw string) error { + raw = strings.TrimSpace(raw) + if raw == "" { + return errors.New("authorization is required") + } + claims := &jwt.RegisteredClaims{} + tokenValue, err := jwt.ParseWithClaims(raw, claims, func(tokenValue *jwt.Token) (any, error) { + if tokenValue.Method != jwt.SigningMethodHS256 { + return nil, fmt.Errorf("unexpected signing method: %s", tokenValue.Method.Alg()) + } + return a.key, nil + }, jwt.WithExpirationRequired(), jwt.WithIssuedAt(), jwt.WithValidMethods([]string{jwt.SigningMethodHS256.Alg()})) + if err != nil || !tokenValue.Valid { + return errors.New("authorization is invalid or expired") + } + if claims.IssuedAt == nil { + return errors.New("authorization issued-at is required") + } + now := time.Now() + if claims.IssuedAt.Time.After(now) || now.Sub(claims.IssuedAt.Time) > a.expire { + return errors.New("authorization is expired") + } + return nil +} + +func (a *authorization) isAnonymous(requestPath string) bool { + requestPath = normalizePath(requestPath) + if strings.HasPrefix(requestPath, "/grpc.reflection.") || strings.HasPrefix(requestPath, "/grpc.health.") { + return true + } + _, ok := a.anonymous[requestPath] + return ok +} + +func canonicalHTTPPath(requestPath string) string { + normalized := normalizePath(requestPath) + parts := strings.Split(strings.TrimPrefix(normalized, "/"), "/") + if len(parts) == 4 && parts[0] == "rpc" { + return "/" + parts[1] + "." + parts[2] + "/" + parts[3] + } + return normalized +} + +func normalizePath(value string) string { + value = strings.TrimSpace(value) + if value == "" { + return "" + } + return path.Clean("/" + strings.TrimPrefix(value, "/")) +} + +func writeHTTPAuthorizationError(w http.ResponseWriter, err error) { + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(http.StatusOK) + _, _ = fmt.Fprintf(w, `{"code":%d,"message":%q}`, codes.Unauthenticated, err.Error()) +} diff --git a/all/internal/server/authorization_test.go b/all/internal/server/authorization_test.go new file mode 100644 index 0000000..d9127ac --- /dev/null +++ b/all/internal/server/authorization_test.go @@ -0,0 +1,100 @@ +package server + +import ( + "context" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" + + "github.com/golang-jwt/jwt/v5" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +const testAuthorizationKey = "0123456789abcdef0123456789abcdef" + +func TestHTTPAuthorization(t *testing.T) { + auth, err := newAuthorization(testAuthorizationKey, 3600, []string{"/passport.Login/Pwd", "/rest/fts/ping"}) + if err != nil { + t.Fatal(err) + } + next := http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusNoContent) }) + handler := auth.httpMiddleware(next) + + tests := []struct { + name string + path string + token string + want int + }{ + {name: "grpc gateway anonymous", path: "/passport.Login/Pwd", want: http.StatusNoContent}, + {name: "dynamic rpc anonymous", path: "/rpc/passport/Login/Pwd", want: http.StatusNoContent}, + {name: "rest anonymous", path: "/rest/fts/ping", want: http.StatusNoContent}, + {name: "missing token", path: "/passport.Account/Get", want: http.StatusOK}, + {name: "valid raw token", path: "/passport.Account/Get", token: signedToken(t, time.Now(), time.Now().Add(time.Hour)), want: http.StatusNoContent}, + {name: "bearer rejected", path: "/passport.Account/Get", token: "Bearer " + signedToken(t, time.Now(), time.Now().Add(time.Hour)), want: http.StatusOK}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + request := httptest.NewRequest(http.MethodPost, test.path, nil) + if test.token != "" { + request.Header.Set("Authorization", test.token) + } + response := httptest.NewRecorder() + handler.ServeHTTP(response, request) + if response.Code != test.want { + t.Fatalf("status=%d body=%s", response.Code, response.Body.String()) + } + if test.want == http.StatusOK && !strings.Contains(response.Body.String(), `"code":16`) { + t.Fatalf("unexpected authorization error: %s", response.Body.String()) + } + }) + } +} + +func TestAuthorizationRejectsTokenOlderThanConfiguredLifetime(t *testing.T) { + auth, err := newAuthorization(testAuthorizationKey, 60, nil) + if err != nil { + t.Fatal(err) + } + if err := auth.validate(signedToken(t, time.Now().Add(-2*time.Minute), time.Now().Add(time.Hour))); err == nil { + t.Fatal("expected token older than configured lifetime to be rejected") + } +} + +func TestGRPCAuthorization(t *testing.T) { + auth, err := newAuthorization(testAuthorizationKey, 3600, []string{"/passport.Login/Pwd"}) + if err != nil { + t.Fatal(err) + } + handler := func(context.Context, any) (any, error) { return "ok", nil } + + if _, err := auth.unaryInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{FullMethod: "/passport.Login/Pwd"}, handler); err != nil { + t.Fatalf("anonymous method failed: %v", err) + } + if _, err := auth.unaryInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{FullMethod: "/passport.Account/Get"}, handler); status.Code(err) != codes.Unauthenticated { + t.Fatalf("expected unauthenticated, got %v", err) + } + ctx := metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorization", signedToken(t, time.Now(), time.Now().Add(time.Hour)))) + if _, err := auth.unaryInterceptor(ctx, nil, &grpc.UnaryServerInfo{FullMethod: "/passport.Account/Get"}, handler); err != nil { + t.Fatalf("valid token failed: %v", err) + } +} + +func signedToken(t *testing.T, issuedAt, expiresAt time.Time) string { + t.Helper() + claims := jwt.RegisteredClaims{ + IssuedAt: jwt.NewNumericDate(issuedAt), + NotBefore: jwt.NewNumericDate(issuedAt), + ExpiresAt: jwt.NewNumericDate(expiresAt), + } + value, err := jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString([]byte(testAuthorizationKey)) + if err != nil { + t.Fatal(err) + } + return value +} diff --git a/all/internal/server/dynamic.go b/all/internal/server/dynamic.go index cbe9784..af41783 100644 --- a/all/internal/server/dynamic.go +++ b/all/internal/server/dynamic.go @@ -30,7 +30,6 @@ const maxDynamicRPCBody = 4 << 20 type dynamicGateway struct { conn *grpc.ClientConn - allow map[string]struct{} mu sync.RWMutex cache map[string]protoreflect.MethodDescriptor } @@ -42,18 +41,12 @@ type dynamicRPCResponse struct { Details []json.RawMessage `json:"details,omitempty"` } -func newDynamicGateway(grpcAddr string, allow []string) (*dynamicGateway, error) { +func newDynamicGateway(grpcAddr string) (*dynamicGateway, error) { conn, err := grpc.NewClient(reflectionTarget(grpcAddr), grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { return nil, fmt.Errorf("create dynamic gRPC client: %w", err) } - allowed := make(map[string]struct{}, len(allow)) - for _, item := range allow { - if item = strings.TrimSpace(item); item != "" { - allowed[item] = struct{}{} - } - } - return &dynamicGateway{conn: conn, allow: allowed, cache: make(map[string]protoreflect.MethodDescriptor)}, nil + return &dynamicGateway{conn: conn, cache: make(map[string]protoreflect.MethodDescriptor)}, nil } func reflectionTarget(addr string) string { @@ -78,12 +71,6 @@ func (g *dynamicGateway) handle(c *gin.Context) { return } serviceName := moduleName + "." + serviceShortName - fullMethod := serviceName + "." + methodName - if !g.isAllowed(serviceName, fullMethod) { - writeDynamicError(c, status.Error(codes.PermissionDenied, "dynamic RPC method is not allowed")) - return - } - descriptor, err := g.resolveMethod(c.Request.Context(), serviceName, methodName) if err != nil { writeDynamicError(c, err) @@ -125,15 +112,6 @@ func (g *dynamicGateway) handle(c *gin.Context) { c.JSON(http.StatusOK, dynamicRPCResponse{Code: int32(codes.OK), Message: codes.OK.String(), Data: data}) } -func (g *dynamicGateway) isAllowed(serviceName, fullMethod string) bool { - for _, key := range []string{"*", serviceName, fullMethod} { - if _, ok := g.allow[key]; ok { - return true - } - } - return false -} - func (g *dynamicGateway) resolveMethod(ctx context.Context, serviceName, methodName string) (protoreflect.MethodDescriptor, error) { cacheKey := serviceName + "." + methodName g.mu.RLock() diff --git a/all/internal/server/dynamic_test.go b/all/internal/server/dynamic_test.go index b84de95..8ab054c 100644 --- a/all/internal/server/dynamic_test.go +++ b/all/internal/server/dynamic_test.go @@ -10,7 +10,6 @@ import ( "github.com/gin-gonic/gin" "google.golang.org/grpc" - "google.golang.org/grpc/codes" "google.golang.org/grpc/health" healthpb "google.golang.org/grpc/health/grpc_health_v1" "google.golang.org/grpc/metadata" @@ -33,7 +32,7 @@ func TestDynamicGatewayInvokesUnaryRPC(t *testing.T) { _ = listener.Close() }) - gateway, err := newDynamicGateway(listener.Addr().String(), []string{"grpc.health.v1.Health.Check"}) + gateway, err := newDynamicGateway(listener.Addr().String()) if err != nil { t.Fatal(err) } @@ -61,26 +60,6 @@ func TestDynamicGatewayInvokesUnaryRPC(t *testing.T) { } } -func TestDynamicGatewayDeniesMethodsByDefault(t *testing.T) { - gateway := &dynamicGateway{allow: map[string]struct{}{}} - gin.SetMode(gin.TestMode) - engine := gin.New() - engine.POST("/rpc/:module/:service/:method", gateway.handle) - request := httptest.NewRequest(http.MethodPost, "/rpc/grpc.health.v1/Health/Check", strings.NewReader(`{}`)) - response := httptest.NewRecorder() - engine.ServeHTTP(response, request) - if response.Code != http.StatusOK { - t.Fatalf("dynamic RPC errors must use HTTP 200, got %d", response.Code) - } - var payload dynamicRPCResponse - if err := json.Unmarshal(response.Body.Bytes(), &payload); err != nil { - t.Fatal(err) - } - if payload.Code != int32(codes.PermissionDenied) { - t.Fatalf("expected permission denied, got %s", response.Body.String()) - } -} - func TestOutgoingMetadataFiltersHeaders(t *testing.T) { request := httptest.NewRequest(http.MethodPost, "/", nil) request.Header.Set("Authorization", "Bearer token") diff --git a/all/internal/server/server.go b/all/internal/server/server.go index 40ed434..35a2f16 100644 --- a/all/internal/server/server.go +++ b/all/internal/server/server.go @@ -21,10 +21,15 @@ type Server struct { HTTP *gin.Engine http *http.Server dynamic *dynamicGateway + auth *authorization } -func New() *Server { - grpcServer := grpc.NewServer() +func New(key string, expireSeconds int64, anonymous []string) (*Server, error) { + auth, err := newAuthorization(key, expireSeconds, anonymous) + if err != nil { + return nil, err + } + grpcServer := grpc.NewServer(grpc.UnaryInterceptor(auth.unaryInterceptor)) reflection.Register(grpcServer) engine := gin.New() engine.Use(gin.Logger(), gin.Recovery()) @@ -32,10 +37,11 @@ func New() *Server { GRPC: grpcServer, Gateway: gwRuntime.NewServeMux(), HTTP: engine, - } + auth: auth, + }, nil } -func (s *Server) Start(grpcAddr, httpAddr string, allow []string) error { +func (s *Server) Start(grpcAddr, httpAddr string) error { grpcListener, err := net.Listen("tcp", grpcAddr) if err != nil { return fmt.Errorf("listen gRPC on %s: %w", grpcAddr, err) @@ -46,7 +52,7 @@ func (s *Server) Start(grpcAddr, httpAddr string, allow []string) error { return fmt.Errorf("listen HTTP on %s: %w", httpAddr, err) } - s.dynamic, err = newDynamicGateway(grpcAddr, allow) + s.dynamic, err = newDynamicGateway(grpcAddr) if err != nil { _ = grpcListener.Close() _ = httpListener.Close() @@ -65,7 +71,7 @@ func (s *Server) Start(grpcAddr, httpAddr string, allow []string) error { }) s.http = &http.Server{ Addr: httpAddr, - Handler: handler, + Handler: s.auth.httpMiddleware(handler), ReadHeaderTimeout: 10 * time.Second, IdleTimeout: 120 * time.Second, MaxHeaderBytes: 1 << 20, diff --git a/all/internal/server/server_test.go b/all/internal/server/server_test.go index dd28d84..136e51e 100644 --- a/all/internal/server/server_test.go +++ b/all/internal/server/server_test.go @@ -9,7 +9,10 @@ import ( ) func TestHTTPRouterIsAvailable(t *testing.T) { - srv := New() + srv, err := New("0123456789abcdef0123456789abcdef", 3600, []string{"/healthz"}) + if err != nil { + t.Fatal(err) + } srv.HTTP.GET("/healthz", func(c *gin.Context) { c.Status(http.StatusNoContent) }) request := httptest.NewRequest(http.MethodGet, "/healthz", nil) diff --git a/scripts/api-docgen/main.go b/scripts/api-docgen/main.go index 25766e4..ad0f6d4 100644 --- a/scripts/api-docgen/main.go +++ b/scripts/api-docgen/main.go @@ -90,7 +90,7 @@ func renderModule(module moduleInfo, services []protoreflect.ServiceDescriptor) fmt.Fprintf(&out, "- 动态 HTTP:`POST /rpc/%s/{Service}/{Method}`\n", module.Package) fmt.Fprintf(&out, "- 原生 gRPC:`/%s.{Service}/{Method}`\n", module.Package) fmt.Fprintf(&out, "- grpc-gateway:`POST /%s.{Service}/{Method}`\n", module.Package) - out.WriteString("- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。\n") + out.WriteString("- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。\n") out.WriteString("- 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。\n\n") out.WriteString("## 服务概览\n\n") @@ -122,7 +122,6 @@ func renderModule(module moduleInfo, services []protoreflect.ServiceDescriptor) fmt.Fprintf(&out, "\n### %s.%s\n\n", service.Name(), method.Name()) fmt.Fprintf(&out, "- 动态 HTTP:`POST /rpc/%s/%s/%s`\n", module.Package, service.Name(), method.Name()) fmt.Fprintf(&out, "- gRPC:`/%s/%s`\n", service.FullName(), method.Name()) - fmt.Fprintf(&out, "- 白名单键:`%s.%s`\n", service.FullName(), method.Name()) out.WriteString("- 请求示例:\n\n```json\n") out.Write(exampleJSON(method.Input())) out.WriteString("\n```\n") diff --git a/wiki/api/00-overview.md b/wiki/api/00-overview.md index 3cdbc0d..cc33477 100644 --- a/wiki/api/00-overview.md +++ b/wiki/api/00-overview.md @@ -15,7 +15,7 @@ ```http POST /rpc/passport/Login/Pwd -Authorization: Bearer +Authorization: Content-Type: application/json {"account":"demo","password":"secret"} @@ -37,8 +37,8 @@ Content-Type: application/json ```json { - "code": 7, - "message": "dynamic RPC method is not allowed", + "code": 3, + "message": "invalid protobuf JSON: ...", "details": [] } ``` @@ -67,23 +67,10 @@ Content-Type: application/json 需要身份的接口统一发送: ```http -Authorization: Bearer +Authorization: ``` -具体方法是否允许匿名由服务实现和 gRPC interceptor 决定。客户端不应仅根据请求字段推断匿名权限。 - -## 动态 RPC 白名单 - -`all/etc/_.yaml` 的 `DynamicRPC.Allow` 控制可调用范围: - -```yaml -DynamicRPC: - Allow: - - passport.Login.Pwd - - passport.Register -``` - -支持完整方法名、完整服务名或 `*`。生产环境不建议使用 `*`。 +请求头直接传递 JWT,不添加 `Bearer` 前缀。`all` 使用 `Authorization.Key` 验证 HS256 签名,并根据 token 的 `exp` 与 `Authorization.Expire` 校验有效期;是否匿名由 `Authorization.Anonymous` 配置决定。 ## 当前限制与风险 diff --git a/wiki/api/01-ads.md b/wiki/api/01-ads.md index 5771127..a9036d9 100644 --- a/wiki/api/01-ads.md +++ b/wiki/api/01-ads.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/ads/{Service}/{Method}` - 原生 gRPC:`/ads.{Service}/{Method}` - grpc-gateway:`POST /ads.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -28,7 +28,6 @@ - 动态 HTTP:`POST /rpc/ads/Fetch/ByPos` - gRPC:`/ads.Fetch/ByPos` -- 白名单键:`ads.Fetch.ByPos` - 请求示例: ```json diff --git a/wiki/api/02-cloud.md b/wiki/api/02-cloud.md index 8a92c11..76e62c0 100644 --- a/wiki/api/02-cloud.md +++ b/wiki/api/02-cloud.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/cloud/{Service}/{Method}` - 原生 gRPC:`/cloud.{Service}/{Method}` - grpc-gateway:`POST /cloud.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -45,7 +45,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/CreateAlbum` - gRPC:`/cloud.Album/CreateAlbum` -- 白名单键:`cloud.Album.CreateAlbum` - 请求示例: ```json @@ -63,7 +62,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/GetAlbum` - gRPC:`/cloud.Album/GetAlbum` -- 白名单键:`cloud.Album.GetAlbum` - 请求示例: ```json @@ -77,7 +75,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/UpdateAlbum` - gRPC:`/cloud.Album/UpdateAlbum` -- 白名单键:`cloud.Album.UpdateAlbum` - 请求示例: ```json @@ -117,7 +114,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/DeleteAlbum` - gRPC:`/cloud.Album/DeleteAlbum` -- 白名单键:`cloud.Album.DeleteAlbum` - 请求示例: ```json @@ -131,7 +127,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/ListAlbums` - gRPC:`/cloud.Album/ListAlbums` -- 白名单键:`cloud.Album.ListAlbums` - 请求示例: ```json @@ -148,7 +143,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/SetCoverPhoto` - gRPC:`/cloud.Album/SetCoverPhoto` -- 白名单键:`cloud.Album.SetCoverPhoto` - 请求示例: ```json @@ -162,7 +156,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/UploadPhoto` - gRPC:`/cloud.Album/UploadPhoto` -- 白名单键:`cloud.Album.UploadPhoto` - 请求示例: ```json @@ -202,7 +195,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/GetPhoto` - gRPC:`/cloud.Album/GetPhoto` -- 白名单键:`cloud.Album.GetPhoto` - 请求示例: ```json @@ -216,7 +208,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/UpdatePhoto` - gRPC:`/cloud.Album/UpdatePhoto` -- 白名单键:`cloud.Album.UpdatePhoto` - 请求示例: ```json @@ -256,7 +247,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/DeletePhoto` - gRPC:`/cloud.Album/DeletePhoto` -- 白名单键:`cloud.Album.DeletePhoto` - 请求示例: ```json @@ -270,7 +260,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/ListPhotos` - gRPC:`/cloud.Album/ListPhotos` -- 白名单键:`cloud.Album.ListPhotos` - 请求示例: ```json @@ -287,7 +276,6 @@ - 动态 HTTP:`POST /rpc/cloud/Album/MovePhoto` - gRPC:`/cloud.Album/MovePhoto` -- 白名单键:`cloud.Album.MovePhoto` - 请求示例: ```json @@ -312,7 +300,6 @@ - 动态 HTTP:`POST /rpc/cloud/Bookmark/CreateBookmark` - gRPC:`/cloud.Bookmark/CreateBookmark` -- 白名单键:`cloud.Bookmark.CreateBookmark` - 请求示例: ```json @@ -333,7 +320,6 @@ - 动态 HTTP:`POST /rpc/cloud/Bookmark/GetBookmark` - gRPC:`/cloud.Bookmark/GetBookmark` -- 白名单键:`cloud.Bookmark.GetBookmark` - 请求示例: ```json @@ -346,7 +332,6 @@ - 动态 HTTP:`POST /rpc/cloud/Bookmark/UpdateBookmark` - gRPC:`/cloud.Bookmark/UpdateBookmark` -- 白名单键:`cloud.Bookmark.UpdateBookmark` - 请求示例: ```json @@ -369,7 +354,6 @@ - 动态 HTTP:`POST /rpc/cloud/Bookmark/DeleteBookmark` - gRPC:`/cloud.Bookmark/DeleteBookmark` -- 白名单键:`cloud.Bookmark.DeleteBookmark` - 请求示例: ```json @@ -382,7 +366,6 @@ - 动态 HTTP:`POST /rpc/cloud/Bookmark/ListBookmarks` - gRPC:`/cloud.Bookmark/ListBookmarks` -- 白名单键:`cloud.Bookmark.ListBookmarks` - 请求示例: ```json @@ -399,7 +382,6 @@ - 动态 HTTP:`POST /rpc/cloud/Bookmark/ImportBookmarks` - gRPC:`/cloud.Bookmark/ImportBookmarks` -- 白名单键:`cloud.Bookmark.ImportBookmarks` - 请求示例: ```json @@ -433,7 +415,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/CreateDir` - gRPC:`/cloud.Disk/CreateDir` -- 白名单键:`cloud.Disk.CreateDir` - 请求示例: ```json @@ -450,7 +431,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/GetDir` - gRPC:`/cloud.Disk/GetDir` -- 白名单键:`cloud.Disk.GetDir` - 请求示例: ```json @@ -464,7 +444,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/UpdateDir` - gRPC:`/cloud.Disk/UpdateDir` -- 白名单键:`cloud.Disk.UpdateDir` - 请求示例: ```json @@ -503,7 +482,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/DeleteDir` - gRPC:`/cloud.Disk/DeleteDir` -- 白名单键:`cloud.Disk.DeleteDir` - 请求示例: ```json @@ -517,7 +495,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/ListDirs` - gRPC:`/cloud.Disk/ListDirs` -- 白名单键:`cloud.Disk.ListDirs` - 请求示例: ```json @@ -534,7 +511,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/GetDirTree` - gRPC:`/cloud.Disk/GetDirTree` -- 白名单键:`cloud.Disk.GetDirTree` - 请求示例: ```json @@ -548,7 +524,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/MoveDir` - gRPC:`/cloud.Disk/MoveDir` -- 白名单键:`cloud.Disk.MoveDir` - 请求示例: ```json @@ -562,7 +537,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/UploadFile` - gRPC:`/cloud.Disk/UploadFile` -- 白名单键:`cloud.Disk.UploadFile` - 请求示例: ```json @@ -583,7 +557,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/GetFile` - gRPC:`/cloud.Disk/GetFile` -- 白名单键:`cloud.Disk.GetFile` - 请求示例: ```json @@ -597,7 +570,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/UpdateFile` - gRPC:`/cloud.Disk/UpdateFile` -- 白名单键:`cloud.Disk.UpdateFile` - 请求示例: ```json @@ -636,7 +608,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/DeleteFile` - gRPC:`/cloud.Disk/DeleteFile` -- 白名单键:`cloud.Disk.DeleteFile` - 请求示例: ```json @@ -650,7 +621,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/ListFiles` - gRPC:`/cloud.Disk/ListFiles` -- 白名单键:`cloud.Disk.ListFiles` - 请求示例: ```json @@ -667,7 +637,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/MoveFile` - gRPC:`/cloud.Disk/MoveFile` -- 白名单键:`cloud.Disk.MoveFile` - 请求示例: ```json @@ -681,7 +650,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/CopyFile` - gRPC:`/cloud.Disk/CopyFile` -- 白名单键:`cloud.Disk.CopyFile` - 请求示例: ```json @@ -696,7 +664,6 @@ - 动态 HTTP:`POST /rpc/cloud/Disk/SearchFiles` - gRPC:`/cloud.Disk/SearchFiles` -- 白名单键:`cloud.Disk.SearchFiles` - 请求示例: ```json @@ -728,7 +695,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/CreateNote` - gRPC:`/cloud.Note/CreateNote` -- 白名单键:`cloud.Note.CreateNote` - 请求示例: ```json @@ -749,7 +715,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/GetNote` - gRPC:`/cloud.Note/GetNote` -- 白名单键:`cloud.Note.GetNote` - 请求示例: ```json @@ -763,7 +728,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/UpdateNote` - gRPC:`/cloud.Note/UpdateNote` -- 白名单键:`cloud.Note.UpdateNote` - 请求示例: ```json @@ -798,7 +762,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/DeleteNote` - gRPC:`/cloud.Note/DeleteNote` -- 白名单键:`cloud.Note.DeleteNote` - 请求示例: ```json @@ -812,7 +775,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/ListNotes` - gRPC:`/cloud.Note/ListNotes` -- 白名单键:`cloud.Note.ListNotes` - 请求示例: ```json @@ -829,7 +791,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/TogglePin` - gRPC:`/cloud.Note/TogglePin` -- 白名单键:`cloud.Note.TogglePin` - 请求示例: ```json @@ -843,7 +804,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/IncrementViews` - gRPC:`/cloud.Note/IncrementViews` -- 白名单键:`cloud.Note.IncrementViews` - 请求示例: ```json @@ -857,7 +817,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/SearchNotes` - gRPC:`/cloud.Note/SearchNotes` -- 白名单键:`cloud.Note.SearchNotes` - 请求示例: ```json @@ -874,7 +833,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/InsertAttachment` - gRPC:`/cloud.Note/InsertAttachment` -- 白名单键:`cloud.Note.InsertAttachment` - 请求示例: ```json @@ -893,7 +851,6 @@ - 动态 HTTP:`POST /rpc/cloud/Note/DeleteAttachment` - gRPC:`/cloud.Note/DeleteAttachment` -- 白名单键:`cloud.Note.DeleteAttachment` - 请求示例: ```json @@ -921,7 +878,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/CreatePrivateData` - gRPC:`/cloud.Private/CreatePrivateData` -- 白名单键:`cloud.Private.CreatePrivateData` - 请求示例: ```json @@ -941,7 +897,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/GetPrivateData` - gRPC:`/cloud.Private/GetPrivateData` -- 白名单键:`cloud.Private.GetPrivateData` - 请求示例: ```json @@ -955,7 +910,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/UpdatePrivateData` - gRPC:`/cloud.Private/UpdatePrivateData` -- 白名单键:`cloud.Private.UpdatePrivateData` - 请求示例: ```json @@ -977,7 +931,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/DeletePrivateData` - gRPC:`/cloud.Private/DeletePrivateData` -- 白名单键:`cloud.Private.DeletePrivateData` - 请求示例: ```json @@ -991,7 +944,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/ListPrivateData` - gRPC:`/cloud.Private/ListPrivateData` -- 白名单键:`cloud.Private.ListPrivateData` - 请求示例: ```json @@ -1008,7 +960,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/GetPrivateDataByType` - gRPC:`/cloud.Private/GetPrivateDataByType` -- 白名单键:`cloud.Private.GetPrivateDataByType` - 请求示例: ```json @@ -1025,7 +976,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/SearchPrivateData` - gRPC:`/cloud.Private/SearchPrivateData` -- 白名单键:`cloud.Private.SearchPrivateData` - 请求示例: ```json @@ -1042,7 +992,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/EncryptData` - gRPC:`/cloud.Private/EncryptData` -- 白名单键:`cloud.Private.EncryptData` - 请求示例: ```json @@ -1056,7 +1005,6 @@ - 动态 HTTP:`POST /rpc/cloud/Private/DecryptData` - gRPC:`/cloud.Private/DecryptData` -- 白名单键:`cloud.Private.DecryptData` - 请求示例: ```json @@ -1080,7 +1028,6 @@ - 动态 HTTP:`POST /rpc/cloud/Share/CreateShare` - gRPC:`/cloud.Share/CreateShare` -- 白名单键:`cloud.Share.CreateShare` - 请求示例: ```json @@ -1100,7 +1047,6 @@ - 动态 HTTP:`POST /rpc/cloud/Share/GetShare` - gRPC:`/cloud.Share/GetShare` -- 白名单键:`cloud.Share.GetShare` - 请求示例: ```json @@ -1114,7 +1060,6 @@ - 动态 HTTP:`POST /rpc/cloud/Share/DeleteShare` - gRPC:`/cloud.Share/DeleteShare` -- 白名单键:`cloud.Share.DeleteShare` - 请求示例: ```json @@ -1128,7 +1073,6 @@ - 动态 HTTP:`POST /rpc/cloud/Share/ListShares` - gRPC:`/cloud.Share/ListShares` -- 白名单键:`cloud.Share.ListShares` - 请求示例: ```json @@ -1145,7 +1089,6 @@ - 动态 HTTP:`POST /rpc/cloud/Share/ValidateSharePassword` - gRPC:`/cloud.Share/ValidateSharePassword` -- 白名单键:`cloud.Share.ValidateSharePassword` - 请求示例: ```json @@ -1166,7 +1109,6 @@ - 动态 HTTP:`POST /rpc/cloud/Space/Get` - gRPC:`/cloud.Space/Get` -- 白名单键:`cloud.Space.Get` - 请求示例: ```json @@ -1177,7 +1119,6 @@ - 动态 HTTP:`POST /rpc/cloud/Space/GetByKeyIdentifier` - gRPC:`/cloud.Space/GetByKeyIdentifier` -- 白名单键:`cloud.Space.GetByKeyIdentifier` - 请求示例: ```json diff --git a/wiki/api/03-cms.md b/wiki/api/03-cms.md index 6d0f02d..ba839d4 100644 --- a/wiki/api/03-cms.md +++ b/wiki/api/03-cms.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/cms/{Service}/{Method}` - 原生 gRPC:`/cms.{Service}/{Method}` - grpc-gateway:`POST /cms.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -35,7 +35,6 @@ - 动态 HTTP:`POST /rpc/cms/Category/Fetch` - gRPC:`/cms.Category/Fetch` -- 白名单键:`cms.Category.Fetch` - 请求示例: ```json @@ -49,7 +48,6 @@ - 动态 HTTP:`POST /rpc/cms/Category/Create` - gRPC:`/cms.Category/Create` -- 白名单键:`cms.Category.Create` - 请求示例: ```json @@ -74,7 +72,6 @@ - 动态 HTTP:`POST /rpc/cms/Category/Modify` - gRPC:`/cms.Category/Modify` -- 白名单键:`cms.Category.Modify` - 请求示例: ```json @@ -112,7 +109,6 @@ - 动态 HTTP:`POST /rpc/cms/Category/Delete` - gRPC:`/cms.Category/Delete` -- 白名单键:`cms.Category.Delete` - 请求示例: ```json @@ -136,7 +132,6 @@ - 动态 HTTP:`POST /rpc/cms/Pages/Fetch` - gRPC:`/cms.Pages/Fetch` -- 白名单键:`cms.Pages.Fetch` - 请求示例: ```json @@ -152,7 +147,6 @@ - 动态 HTTP:`POST /rpc/cms/Pages/GetByIdentity` - gRPC:`/cms.Pages/GetByIdentity` -- 白名单键:`cms.Pages.GetByIdentity` - 请求示例: ```json @@ -165,7 +159,6 @@ - 动态 HTTP:`POST /rpc/cms/Pages/GetByKey` - gRPC:`/cms.Pages/GetByKey` -- 白名单键:`cms.Pages.GetByKey` - 请求示例: ```json @@ -178,7 +171,6 @@ - 动态 HTTP:`POST /rpc/cms/Pages/Create` - gRPC:`/cms.Pages/Create` -- 白名单键:`cms.Pages.Create` - 请求示例: ```json @@ -227,7 +219,6 @@ - 动态 HTTP:`POST /rpc/cms/Pages/Modify` - gRPC:`/cms.Pages/Modify` -- 白名单键:`cms.Pages.Modify` - 请求示例: ```json @@ -276,7 +267,6 @@ - 动态 HTTP:`POST /rpc/cms/Pages/Delete` - gRPC:`/cms.Pages/Delete` -- 白名单键:`cms.Pages.Delete` - 请求示例: ```json @@ -314,7 +304,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/Fetch` - gRPC:`/cms.Post/Fetch` -- 白名单键:`cms.Post.Fetch` - 请求示例: ```json @@ -332,7 +321,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/GetByIdentity` - gRPC:`/cms.Post/GetByIdentity` -- 白名单键:`cms.Post.GetByIdentity` - 请求示例: ```json @@ -346,7 +334,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/GetByKey` - gRPC:`/cms.Post/GetByKey` -- 白名单键:`cms.Post.GetByKey` - 请求示例: ```json @@ -359,7 +346,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/Search` - gRPC:`/cms.Post/Search` -- 白名单键:`cms.Post.Search` - 请求示例: ```json @@ -374,7 +360,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/Create` - gRPC:`/cms.Post/Create` -- 白名单键:`cms.Post.Create` - 请求示例: ```json @@ -460,7 +445,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/Modify` - gRPC:`/cms.Post/Modify` -- 白名单键:`cms.Post.Modify` - 请求示例: ```json @@ -546,7 +530,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/Delete` - gRPC:`/cms.Post/Delete` -- 白名单键:`cms.Post.Delete` - 请求示例: ```json @@ -560,7 +543,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/IncrPostLike` - gRPC:`/cms.Post/IncrPostLike` -- 白名单键:`cms.Post.IncrPostLike` - 请求示例: ```json @@ -574,7 +556,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/DescPostLike` - gRPC:`/cms.Post/DescPostLike` -- 白名单键:`cms.Post.DescPostLike` - 请求示例: ```json @@ -588,7 +569,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/IncrPostUnlike` - gRPC:`/cms.Post/IncrPostUnlike` -- 白名单键:`cms.Post.IncrPostUnlike` - 请求示例: ```json @@ -602,7 +582,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/DescPostUnlike` - gRPC:`/cms.Post/DescPostUnlike` -- 白名单键:`cms.Post.DescPostUnlike` - 请求示例: ```json @@ -616,7 +595,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/CommentList` - gRPC:`/cms.Post/CommentList` -- 白名单键:`cms.Post.CommentList` - 请求示例: ```json @@ -631,7 +609,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/AddComment` - gRPC:`/cms.Post/AddComment` -- 白名单键:`cms.Post.AddComment` - 请求示例: ```json @@ -659,7 +636,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/ModifyComment` - gRPC:`/cms.Post/ModifyComment` -- 白名单键:`cms.Post.ModifyComment` - 请求示例: ```json @@ -687,7 +663,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/DeleteComment` - gRPC:`/cms.Post/DeleteComment` -- 白名单键:`cms.Post.DeleteComment` - 请求示例: ```json @@ -701,7 +676,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/IncrCommentLike` - gRPC:`/cms.Post/IncrCommentLike` -- 白名单键:`cms.Post.IncrCommentLike` - 请求示例: ```json @@ -715,7 +689,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/DescCommentLike` - gRPC:`/cms.Post/DescCommentLike` -- 白名单键:`cms.Post.DescCommentLike` - 请求示例: ```json @@ -729,7 +702,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/IncrCommentUnlike` - gRPC:`/cms.Post/IncrCommentUnlike` -- 白名单键:`cms.Post.IncrCommentUnlike` - 请求示例: ```json @@ -743,7 +715,6 @@ - 动态 HTTP:`POST /rpc/cms/Post/DescCommentUnlike` - gRPC:`/cms.Post/DescCommentUnlike` -- 白名单键:`cms.Post.DescCommentUnlike` - 请求示例: ```json @@ -767,7 +738,6 @@ - 动态 HTTP:`POST /rpc/cms/Site/Fetch` - gRPC:`/cms.Site/Fetch` -- 白名单键:`cms.Site.Fetch` - 请求示例: ```json @@ -778,7 +748,6 @@ - 动态 HTTP:`POST /rpc/cms/Site/Get` - gRPC:`/cms.Site/Get` -- 白名单键:`cms.Site.Get` - 请求示例: ```json @@ -792,7 +761,6 @@ - 动态 HTTP:`POST /rpc/cms/Site/Create` - gRPC:`/cms.Site/Create` -- 白名单键:`cms.Site.Create` - 请求示例: ```json @@ -814,7 +782,6 @@ - 动态 HTTP:`POST /rpc/cms/Site/Modify` - gRPC:`/cms.Site/Modify` -- 白名单键:`cms.Site.Modify` - 请求示例: ```json @@ -836,7 +803,6 @@ - 动态 HTTP:`POST /rpc/cms/Site/Delete` - gRPC:`/cms.Site/Delete` -- 白名单键:`cms.Site.Delete` - 请求示例: ```json @@ -859,7 +825,6 @@ - 动态 HTTP:`POST /rpc/cms/Tags/Fetch` - gRPC:`/cms.Tags/Fetch` -- 白名单键:`cms.Tags.Fetch` - 请求示例: ```json @@ -873,7 +838,6 @@ - 动态 HTTP:`POST /rpc/cms/Tags/Create` - gRPC:`/cms.Tags/Create` -- 白名单键:`cms.Tags.Create` - 请求示例: ```json @@ -891,7 +855,6 @@ - 动态 HTTP:`POST /rpc/cms/Tags/Modify` - gRPC:`/cms.Tags/Modify` -- 白名单键:`cms.Tags.Modify` - 请求示例: ```json @@ -909,7 +872,6 @@ - 动态 HTTP:`POST /rpc/cms/Tags/Delete` - gRPC:`/cms.Tags/Delete` -- 白名单键:`cms.Tags.Delete` - 请求示例: ```json diff --git a/wiki/api/04-feedback.md b/wiki/api/04-feedback.md index 86dff35..4471932 100644 --- a/wiki/api/04-feedback.md +++ b/wiki/api/04-feedback.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/feedback/{Service}/{Method}` - 原生 gRPC:`/feedback.{Service}/{Method}` - grpc-gateway:`POST /feedback.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -33,7 +33,6 @@ - 动态 HTTP:`POST /rpc/feedback/Method/List` - gRPC:`/feedback.Method/List` -- 白名单键:`feedback.Method.List` - 请求示例: ```json @@ -55,7 +54,6 @@ - 动态 HTTP:`POST /rpc/feedback/Method/Get` - gRPC:`/feedback.Method/Get` -- 白名单键:`feedback.Method.Get` - 请求示例: ```json @@ -68,7 +66,6 @@ - 动态 HTTP:`POST /rpc/feedback/Method/Add` - gRPC:`/feedback.Method/Add` -- 白名单键:`feedback.Method.Add` - 请求示例: ```json @@ -105,7 +102,6 @@ - 动态 HTTP:`POST /rpc/feedback/Method/Modify` - gRPC:`/feedback.Method/Modify` -- 白名单键:`feedback.Method.Modify` - 请求示例: ```json @@ -143,7 +139,6 @@ - 动态 HTTP:`POST /rpc/feedback/Method/Delete` - gRPC:`/feedback.Method/Delete` -- 白名单键:`feedback.Method.Delete` - 请求示例: ```json @@ -156,7 +151,6 @@ - 动态 HTTP:`POST /rpc/feedback/Method/Remark` - gRPC:`/feedback.Method/Remark` -- 白名单键:`feedback.Method.Remark` - 请求示例: ```json diff --git a/wiki/api/05-initial.md b/wiki/api/05-initial.md index c34205a..2106055 100644 --- a/wiki/api/05-initial.md +++ b/wiki/api/05-initial.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/initial/{Service}/{Method}` - 原生 gRPC:`/initial.{Service}/{Method}` - grpc-gateway:`POST /initial.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -31,7 +31,6 @@ - 动态 HTTP:`POST /rpc/initial/Check/Hello` - gRPC:`/initial.Check/Hello` -- 白名单键:`initial.Check.Hello` - 请求示例: ```json @@ -44,7 +43,6 @@ - 动态 HTTP:`POST /rpc/initial/Check/Config` - gRPC:`/initial.Check/Config` -- 白名单键:`initial.Check.Config` - 请求示例: ```json @@ -58,7 +56,6 @@ - 动态 HTTP:`POST /rpc/initial/Check/Updates` - gRPC:`/initial.Check/Updates` -- 白名单键:`initial.Check.Updates` - 请求示例: ```json @@ -82,7 +79,6 @@ - 动态 HTTP:`POST /rpc/initial/Data/Country` - gRPC:`/initial.Data/Country` -- 白名单键:`initial.Data.Country` - 请求示例: ```json @@ -93,7 +89,6 @@ - 动态 HTTP:`POST /rpc/initial/Data/Areas` - gRPC:`/initial.Data/Areas` -- 白名单键:`initial.Data.Areas` - 请求示例: ```json @@ -108,7 +103,6 @@ - 动态 HTTP:`POST /rpc/initial/Data/Datas` - gRPC:`/initial.Data/Datas` -- 白名单键:`initial.Data.Datas` - 请求示例: ```json diff --git a/wiki/api/06-passport.md b/wiki/api/06-passport.md index 81adae0..068a9a6 100644 --- a/wiki/api/06-passport.md +++ b/wiki/api/06-passport.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/passport/{Service}/{Method}` - 原生 gRPC:`/passport.{Service}/{Method}` - grpc-gateway:`POST /passport.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -37,7 +37,6 @@ - 动态 HTTP:`POST /rpc/passport/Account/Get` - gRPC:`/passport.Account/Get` -- 白名单键:`passport.Account.Get` - 请求示例: ```json @@ -48,7 +47,6 @@ - 动态 HTTP:`POST /rpc/passport/Account/SetData` - gRPC:`/passport.Account/SetData` -- 白名单键:`passport.Account.SetData` - 请求示例: ```json @@ -72,7 +70,6 @@ - 动态 HTTP:`POST /rpc/passport/Account/SetPassword` - gRPC:`/passport.Account/SetPassword` -- 白名单键:`passport.Account.SetPassword` - 请求示例: ```json @@ -86,7 +83,6 @@ - 动态 HTTP:`POST /rpc/passport/Account/TagCreate` - gRPC:`/passport.Account/TagCreate` -- 白名单键:`passport.Account.TagCreate` - 请求示例: ```json @@ -100,7 +96,6 @@ - 动态 HTTP:`POST /rpc/passport/Account/TagRemove` - gRPC:`/passport.Account/TagRemove` -- 白名单键:`passport.Account.TagRemove` - 请求示例: ```json @@ -114,7 +109,6 @@ - 动态 HTTP:`POST /rpc/passport/Account/Statistics` - gRPC:`/passport.Account/Statistics` -- 白名单键:`passport.Account.Statistics` - 请求示例: ```json @@ -136,7 +130,6 @@ - 动态 HTTP:`POST /rpc/passport/Forget/Verify` - gRPC:`/passport.Forget/Verify` -- 白名单键:`passport.Forget.Verify` - 请求示例: ```json @@ -150,7 +143,6 @@ - 动态 HTTP:`POST /rpc/passport/Forget/Reset` - gRPC:`/passport.Forget/Reset` -- 白名单键:`passport.Forget.Reset` - 请求示例: ```json @@ -172,7 +164,6 @@ - 动态 HTTP:`POST /rpc/passport/Login/Pwd` - gRPC:`/passport.Login/Pwd` -- 白名单键:`passport.Login.Pwd` - 请求示例: ```json @@ -186,7 +177,6 @@ - 动态 HTTP:`POST /rpc/passport/Login/Code` - gRPC:`/passport.Login/Code` -- 白名单键:`passport.Login.Code` - 请求示例: ```json @@ -205,7 +195,6 @@ - 动态 HTTP:`POST /rpc/passport/Login/Quick` - gRPC:`/passport.Login/Quick` -- 白名单键:`passport.Login.Quick` - 请求示例: ```json @@ -231,7 +220,6 @@ - 动态 HTTP:`POST /rpc/passport/Register/Pwd` - gRPC:`/passport.Register/Pwd` -- 白名单键:`passport.Register.Pwd` - 请求示例: ```json @@ -253,7 +241,6 @@ - 动态 HTTP:`POST /rpc/passport/Register/Code` - gRPC:`/passport.Register/Code` -- 白名单键:`passport.Register.Code` - 请求示例: ```json @@ -282,7 +269,6 @@ - 动态 HTTP:`POST /rpc/passport/Verify/Request` - gRPC:`/passport.Verify/Request` -- 白名单键:`passport.Verify.Request` - 请求示例: ```json @@ -298,7 +284,6 @@ - 动态 HTTP:`POST /rpc/passport/Verify/JumioCallback` - gRPC:`/passport.Verify/JumioCallback` -- 白名单键:`passport.Verify.JumioCallback` - 请求示例: ```json diff --git a/wiki/api/07-sender.md b/wiki/api/07-sender.md index 0b9fa82..712c53c 100644 --- a/wiki/api/07-sender.md +++ b/wiki/api/07-sender.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/sender/{Service}/{Method}` - 原生 gRPC:`/sender.{Service}/{Method}` - grpc-gateway:`POST /sender.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -29,7 +29,6 @@ - 动态 HTTP:`POST /rpc/sender/Mail/Send` - gRPC:`/sender.Mail/Send` -- 白名单键:`sender.Mail.Send` - 请求示例: ```json @@ -55,7 +54,6 @@ - 动态 HTTP:`POST /rpc/sender/Sms/Send` - gRPC:`/sender.Sms/Send` -- 白名单键:`sender.Sms.Send` - 请求示例: ```json @@ -75,7 +73,6 @@ - 动态 HTTP:`POST /rpc/sender/Sms/Verify` - gRPC:`/sender.Sms/Verify` -- 白名单键:`sender.Sms.Verify` - 请求示例: ```json diff --git a/wiki/api/08-address.md b/wiki/api/08-address.md index 4475267..72775d7 100644 --- a/wiki/api/08-address.md +++ b/wiki/api/08-address.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/address/{Service}/{Method}` - 原生 gRPC:`/address.{Service}/{Method}` - grpc-gateway:`POST /address.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -32,7 +32,6 @@ - 动态 HTTP:`POST /rpc/address/Library/Create` - gRPC:`/address.Library/Create` -- 白名单键:`address.Library.Create` - 请求示例: ```json @@ -54,7 +53,6 @@ - 动态 HTTP:`POST /rpc/address/Library/Modify` - gRPC:`/address.Library/Modify` -- 白名单键:`address.Library.Modify` - 请求示例: ```json @@ -78,7 +76,6 @@ - 动态 HTTP:`POST /rpc/address/Library/Get` - gRPC:`/address.Library/Get` -- 白名单键:`address.Library.Get` - 请求示例: ```json @@ -92,7 +89,6 @@ - 动态 HTTP:`POST /rpc/address/Library/Fetch` - gRPC:`/address.Library/Fetch` -- 白名单键:`address.Library.Fetch` - 请求示例: ```json @@ -106,7 +102,6 @@ - 动态 HTTP:`POST /rpc/address/Library/Delete` - gRPC:`/address.Library/Delete` -- 白名单键:`address.Library.Delete` - 请求示例: ```json diff --git a/wiki/api/09-mall.md b/wiki/api/09-mall.md index d458b4a..0f83062 100644 --- a/wiki/api/09-mall.md +++ b/wiki/api/09-mall.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/mall/{Service}/{Method}` - 原生 gRPC:`/mall.{Service}/{Method}` - grpc-gateway:`POST /mall.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -38,7 +38,6 @@ - 动态 HTTP:`POST /rpc/mall/Ads/ByPos` - gRPC:`/mall.Ads/ByPos` -- 白名单键:`mall.Ads.ByPos` - 请求示例: ```json @@ -54,7 +53,6 @@ - 动态 HTTP:`POST /rpc/mall/Ads/Fetch` - gRPC:`/mall.Ads/Fetch` -- 白名单键:`mall.Ads.Fetch` - 请求示例: ```json @@ -79,7 +77,6 @@ - 动态 HTTP:`POST /rpc/mall/Ads/Create` - gRPC:`/mall.Ads/Create` -- 白名单键:`mall.Ads.Create` - 请求示例: ```json @@ -99,7 +96,6 @@ - 动态 HTTP:`POST /rpc/mall/Ads/Modify` - gRPC:`/mall.Ads/Modify` -- 白名单键:`mall.Ads.Modify` - 请求示例: ```json @@ -119,7 +115,6 @@ - 动态 HTTP:`POST /rpc/mall/Ads/Delete` - gRPC:`/mall.Ads/Delete` -- 白名单键:`mall.Ads.Delete` - 请求示例: ```json @@ -142,7 +137,6 @@ - 动态 HTTP:`POST /rpc/mall/Category/Fetch` - gRPC:`/mall.Category/Fetch` -- 白名单键:`mall.Category.Fetch` - 请求示例: ```json @@ -158,7 +152,6 @@ - 动态 HTTP:`POST /rpc/mall/Category/Create` - gRPC:`/mall.Category/Create` -- 白名单键:`mall.Category.Create` - 请求示例: ```json @@ -185,7 +178,6 @@ - 动态 HTTP:`POST /rpc/mall/Category/Delete` - gRPC:`/mall.Category/Delete` -- 白名单键:`mall.Category.Delete` - 请求示例: ```json @@ -199,7 +191,6 @@ - 动态 HTTP:`POST /rpc/mall/Category/Modify` - gRPC:`/mall.Category/Modify` -- 白名单键:`mall.Category.Modify` - 请求示例: ```json @@ -240,7 +231,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/Fetch` - gRPC:`/mall.Freight/Fetch` -- 白名单键:`mall.Freight.Fetch` - 请求示例: ```json @@ -265,7 +255,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/Modify` - gRPC:`/mall.Freight/Modify` -- 白名单键:`mall.Freight.Modify` - 请求示例: ```json @@ -308,7 +297,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/Delete` - gRPC:`/mall.Freight/Delete` -- 白名单键:`mall.Freight.Delete` - 请求示例: ```json @@ -322,7 +310,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/Create` - gRPC:`/mall.Freight/Create` -- 白名单键:`mall.Freight.Create` - 请求示例: ```json @@ -365,7 +352,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/Detail` - gRPC:`/mall.Freight/Detail` -- 白名单键:`mall.Freight.Detail` - 请求示例: ```json @@ -379,7 +365,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/DenyRegionFetch` - gRPC:`/mall.Freight/DenyRegionFetch` -- 白名单键:`mall.Freight.DenyRegionFetch` - 请求示例: ```json @@ -404,7 +389,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/DenyRegionCreate` - gRPC:`/mall.Freight/DenyRegionCreate` -- 白名单键:`mall.Freight.DenyRegionCreate` - 请求示例: ```json @@ -429,7 +413,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/DenyRegionDelete` - gRPC:`/mall.Freight/DenyRegionDelete` -- 白名单键:`mall.Freight.DenyRegionDelete` - 请求示例: ```json @@ -443,7 +426,6 @@ - 动态 HTTP:`POST /rpc/mall/Freight/DenyRegionModify` - gRPC:`/mall.Freight/DenyRegionModify` -- 白名单键:`mall.Freight.DenyRegionModify` - 请求示例: ```json @@ -477,7 +459,6 @@ - 动态 HTTP:`POST /rpc/mall/Notice/Fetch` - gRPC:`/mall.Notice/Fetch` -- 白名单键:`mall.Notice.Fetch` - 请求示例: ```json @@ -502,7 +483,6 @@ - 动态 HTTP:`POST /rpc/mall/Notice/Create` - gRPC:`/mall.Notice/Create` -- 白名单键:`mall.Notice.Create` - 请求示例: ```json @@ -522,7 +502,6 @@ - 动态 HTTP:`POST /rpc/mall/Notice/Modify` - gRPC:`/mall.Notice/Modify` -- 白名单键:`mall.Notice.Modify` - 请求示例: ```json @@ -542,7 +521,6 @@ - 动态 HTTP:`POST /rpc/mall/Notice/Delete` - gRPC:`/mall.Notice/Delete` -- 白名单键:`mall.Notice.Delete` - 请求示例: ```json @@ -582,7 +560,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemFetch` - gRPC:`/mall.Product/ItemFetch` -- 白名单键:`mall.Product.ItemFetch` - 请求示例: ```json @@ -607,7 +584,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemDetail` - gRPC:`/mall.Product/ItemDetail` -- 白名单键:`mall.Product.ItemDetail` - 请求示例: ```json @@ -621,7 +597,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemDetailBySerial` - gRPC:`/mall.Product/ItemDetailBySerial` -- 白名单键:`mall.Product.ItemDetailBySerial` - 请求示例: ```json @@ -637,7 +612,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemDetailBySpec` - gRPC:`/mall.Product/ItemDetailBySpec` -- 白名单键:`mall.Product.ItemDetailBySpec` - 请求示例: ```json @@ -650,7 +624,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemCreate` - gRPC:`/mall.Product/ItemCreate` -- 白名单键:`mall.Product.ItemCreate` - 请求示例: ```json @@ -749,7 +722,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemDelete` - gRPC:`/mall.Product/ItemDelete` -- 白名单键:`mall.Product.ItemDelete` - 请求示例: ```json @@ -763,7 +735,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemModify` - gRPC:`/mall.Product/ItemModify` -- 白名单键:`mall.Product.ItemModify` - 请求示例: ```json @@ -777,7 +748,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/ItemBatchOp` - gRPC:`/mall.Product/ItemBatchOp` -- 白名单键:`mall.Product.ItemBatchOp` - 请求示例: ```json @@ -793,7 +763,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/SpecFetch` - gRPC:`/mall.Product/SpecFetch` -- 白名单键:`mall.Product.SpecFetch` - 请求示例: ```json @@ -818,7 +787,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/SpecCreate` - gRPC:`/mall.Product/SpecCreate` -- 白名单键:`mall.Product.SpecCreate` - 请求示例: ```json @@ -847,7 +815,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/SpecModify` - gRPC:`/mall.Product/SpecModify` -- 白名单键:`mall.Product.SpecModify` - 请求示例: ```json @@ -876,7 +843,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/SpecDelete` - gRPC:`/mall.Product/SpecDelete` -- 白名单键:`mall.Product.SpecDelete` - 请求示例: ```json @@ -890,7 +856,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/SpecDetail` - gRPC:`/mall.Product/SpecDetail` -- 白名单键:`mall.Product.SpecDetail` - 请求示例: ```json @@ -904,7 +869,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/PhotoCreate` - gRPC:`/mall.Product/PhotoCreate` -- 白名单键:`mall.Product.PhotoCreate` - 请求示例: ```json @@ -923,7 +887,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/PhotoDelete` - gRPC:`/mall.Product/PhotoDelete` -- 白名单键:`mall.Product.PhotoDelete` - 请求示例: ```json @@ -937,7 +900,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/PhotoList` - gRPC:`/mall.Product/PhotoList` -- 白名单键:`mall.Product.PhotoList` - 请求示例: ```json @@ -956,7 +918,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/CommentFetch` - gRPC:`/mall.Product/CommentFetch` -- 白名单键:`mall.Product.CommentFetch` - 请求示例: ```json @@ -981,7 +942,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/CommentCreate` - gRPC:`/mall.Product/CommentCreate` -- 白名单键:`mall.Product.CommentCreate` - 请求示例: ```json @@ -1007,7 +967,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/CommentRe` - gRPC:`/mall.Product/CommentRe` -- 白名单键:`mall.Product.CommentRe` - 请求示例: ```json @@ -1033,7 +992,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/CommentDelete` - gRPC:`/mall.Product/CommentDelete` -- 白名单键:`mall.Product.CommentDelete` - 请求示例: ```json @@ -1047,7 +1005,6 @@ - 动态 HTTP:`POST /rpc/mall/Product/CommentModify` - gRPC:`/mall.Product/CommentModify` -- 白名单键:`mall.Product.CommentModify` - 请求示例: ```json @@ -1085,7 +1042,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/Login` - gRPC:`/mall.Staff/Login` -- 白名单键:`mall.Staff.Login` - 请求示例: ```json @@ -1102,7 +1058,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/Fetch` - gRPC:`/mall.Staff/Fetch` -- 白名单键:`mall.Staff.Fetch` - 请求示例: ```json @@ -1127,7 +1082,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/Create` - gRPC:`/mall.Staff/Create` -- 白名单键:`mall.Staff.Create` - 请求示例: ```json @@ -1151,7 +1105,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/Delete` - gRPC:`/mall.Staff/Delete` -- 白名单键:`mall.Staff.Delete` - 请求示例: ```json @@ -1165,7 +1118,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/GetProfile` - gRPC:`/mall.Staff/GetProfile` -- 白名单键:`mall.Staff.GetProfile` - 请求示例: ```json @@ -1179,7 +1131,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/SetProfile` - gRPC:`/mall.Staff/SetProfile` -- 白名单键:`mall.Staff.SetProfile` - 请求示例: ```json @@ -1203,7 +1154,6 @@ - 动态 HTTP:`POST /rpc/mall/Staff/SetPassword` - gRPC:`/mall.Staff/SetPassword` -- 白名单键:`mall.Staff.SetPassword` - 请求示例: ```json @@ -1233,7 +1183,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/ApplyJoin` - gRPC:`/mall.Store/ApplyJoin` -- 白名单键:`mall.Store.ApplyJoin` - 请求示例: ```json @@ -1257,7 +1206,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/Licensing` - gRPC:`/mall.Store/Licensing` -- 白名单键:`mall.Store.Licensing` - 请求示例: ```json @@ -1274,7 +1222,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/GetSetting` - gRPC:`/mall.Store/GetSetting` -- 白名单键:`mall.Store.GetSetting` - 请求示例: ```json @@ -1288,7 +1235,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/SetSetting` - gRPC:`/mall.Store/SetSetting` -- 白名单键:`mall.Store.SetSetting` - 请求示例: ```json @@ -1312,7 +1258,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/SetPayment` - gRPC:`/mall.Store/SetPayment` -- 白名单键:`mall.Store.SetPayment` - 请求示例: ```json @@ -1326,7 +1271,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/SetEmail` - gRPC:`/mall.Store/SetEmail` -- 白名单键:`mall.Store.SetEmail` - 请求示例: ```json @@ -1340,7 +1284,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/GetPayment` - gRPC:`/mall.Store/GetPayment` -- 白名单键:`mall.Store.GetPayment` - 请求示例: ```json @@ -1354,7 +1297,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/GetEmail` - gRPC:`/mall.Store/GetEmail` -- 白名单键:`mall.Store.GetEmail` - 请求示例: ```json @@ -1368,7 +1310,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/MiniCode` - gRPC:`/mall.Store/MiniCode` -- 白名单键:`mall.Store.MiniCode` - 请求示例: ```json @@ -1381,7 +1322,6 @@ - 动态 HTTP:`POST /rpc/mall/Store/Search` - gRPC:`/mall.Store/Search` -- 白名单键:`mall.Store.Search` - 请求示例: ```json diff --git a/wiki/api/10-market.md b/wiki/api/10-market.md index 6a8afda..939f162 100644 --- a/wiki/api/10-market.md +++ b/wiki/api/10-market.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/market/{Service}/{Method}` - 原生 gRPC:`/market.{Service}/{Method}` - grpc-gateway:`POST /market.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -38,7 +38,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Login` - gRPC:`/market.Agency/Login` -- 白名单键:`market.Agency.Login` - 请求示例: ```json @@ -53,7 +52,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Create` - gRPC:`/market.Agency/Create` -- 白名单键:`market.Agency.Create` - 请求示例: ```json @@ -85,7 +83,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Get` - gRPC:`/market.Agency/Get` -- 白名单键:`market.Agency.Get` - 请求示例: ```json @@ -99,7 +96,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Fetch` - gRPC:`/market.Agency/Fetch` -- 白名单键:`market.Agency.Fetch` - 请求示例: ```json @@ -120,7 +116,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Modify` - gRPC:`/market.Agency/Modify` -- 白名单键:`market.Agency.Modify` - 请求示例: ```json @@ -152,7 +147,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Delete` - gRPC:`/market.Agency/Delete` -- 白名单键:`market.Agency.Delete` - 请求示例: ```json @@ -166,7 +160,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/SetPassword` - gRPC:`/market.Agency/SetPassword` -- 白名单键:`market.Agency.SetPassword` - 请求示例: ```json @@ -181,7 +174,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Pending` - gRPC:`/market.Agency/Pending` -- 白名单键:`market.Agency.Pending` - 请求示例: ```json @@ -202,7 +194,6 @@ - 动态 HTTP:`POST /rpc/market/Agency/Approve` - gRPC:`/market.Agency/Approve` -- 白名单键:`market.Agency.Approve` - 请求示例: ```json @@ -226,7 +217,6 @@ - 动态 HTTP:`POST /rpc/market/Data/Overview` - gRPC:`/market.Data/Overview` -- 白名单键:`market.Data.Overview` - 请求示例: ```json @@ -237,7 +227,6 @@ - 动态 HTTP:`POST /rpc/market/Data/MemberFetch` - gRPC:`/market.Data/MemberFetch` -- 白名单键:`market.Data.MemberFetch` - 请求示例: ```json @@ -258,7 +247,6 @@ - 动态 HTTP:`POST /rpc/market/Data/MemberDetails` - gRPC:`/market.Data/MemberDetails` -- 白名单键:`market.Data.MemberDetails` - 请求示例: ```json @@ -272,7 +260,6 @@ - 动态 HTTP:`POST /rpc/market/Data/OrderFetch` - gRPC:`/market.Data/OrderFetch` -- 白名单键:`market.Data.OrderFetch` - 请求示例: ```json @@ -293,7 +280,6 @@ - 动态 HTTP:`POST /rpc/market/Data/OrderDetails` - gRPC:`/market.Data/OrderDetails` -- 白名单键:`market.Data.OrderDetails` - 请求示例: ```json @@ -317,7 +303,6 @@ - 动态 HTTP:`POST /rpc/market/Supply/Create` - gRPC:`/market.Supply/Create` -- 白名单键:`market.Supply.Create` - 请求示例: ```json @@ -344,7 +329,6 @@ - 动态 HTTP:`POST /rpc/market/Supply/Get` - gRPC:`/market.Supply/Get` -- 白名单键:`market.Supply.Get` - 请求示例: ```json @@ -358,7 +342,6 @@ - 动态 HTTP:`POST /rpc/market/Supply/Fetch` - gRPC:`/market.Supply/Fetch` -- 白名单键:`market.Supply.Fetch` - 请求示例: ```json @@ -379,7 +362,6 @@ - 动态 HTTP:`POST /rpc/market/Supply/Modify` - gRPC:`/market.Supply/Modify` -- 白名单键:`market.Supply.Modify` - 请求示例: ```json @@ -406,7 +388,6 @@ - 动态 HTTP:`POST /rpc/market/Supply/Delete` - gRPC:`/market.Supply/Delete` -- 白名单键:`market.Supply.Delete` - 请求示例: ```json diff --git a/wiki/api/11-order.md b/wiki/api/11-order.md index ea6851c..89eb2fa 100644 --- a/wiki/api/11-order.md +++ b/wiki/api/11-order.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/order/{Service}/{Method}` - 原生 gRPC:`/order.{Service}/{Method}` - grpc-gateway:`POST /order.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -34,7 +34,6 @@ - 动态 HTTP:`POST /rpc/order/Cart/Fetch` - gRPC:`/order.Cart/Fetch` -- 白名单键:`order.Cart.Fetch` - 请求示例: ```json @@ -49,7 +48,6 @@ - 动态 HTTP:`POST /rpc/order/Cart/Create` - gRPC:`/order.Cart/Create` -- 白名单键:`order.Cart.Create` - 请求示例: ```json @@ -68,7 +66,6 @@ - 动态 HTTP:`POST /rpc/order/Cart/Modify` - gRPC:`/order.Cart/Modify` -- 白名单键:`order.Cart.Modify` - 请求示例: ```json @@ -90,7 +87,6 @@ - 动态 HTTP:`POST /rpc/order/Cart/Delete` - gRPC:`/order.Cart/Delete` -- 白名单键:`order.Cart.Delete` - 请求示例: ```json @@ -111,7 +107,6 @@ - 动态 HTTP:`POST /rpc/order/Coupon/ByStatus` - gRPC:`/order.Coupon/ByStatus` -- 白名单键:`order.Coupon.ByStatus` - 请求示例: ```json @@ -136,7 +131,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderCreate` - gRPC:`/order.Mgt/OrderCreate` -- 白名单键:`order.Mgt.OrderCreate` - 请求示例: ```json @@ -158,7 +152,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderModify` - gRPC:`/order.Mgt/OrderModify` -- 白名单键:`order.Mgt.OrderModify` - 请求示例: ```json @@ -227,7 +220,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderGet` - gRPC:`/order.Mgt/OrderGet` -- 白名单键:`order.Mgt.OrderGet` - 请求示例: ```json @@ -245,7 +237,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderListByStore` - gRPC:`/order.Mgt/OrderListByStore` -- 白名单键:`order.Mgt.OrderListByStore` - 请求示例: ```json @@ -268,7 +259,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderCancel` - gRPC:`/order.Mgt/OrderCancel` -- 白名单键:`order.Mgt.OrderCancel` - 请求示例: ```json @@ -286,7 +276,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderReturnable` - gRPC:`/order.Mgt/OrderReturnable` -- 白名单键:`order.Mgt.OrderReturnable` - 请求示例: ```json @@ -304,7 +293,6 @@ - 动态 HTTP:`POST /rpc/order/Mgt/OrderApprove` - gRPC:`/order.Mgt/OrderApprove` -- 白名单键:`order.Mgt.OrderApprove` - 请求示例: ```json @@ -337,7 +325,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/QuickCreateByProduct` - gRPC:`/order.Summary/QuickCreateByProduct` -- 白名单键:`order.Summary.QuickCreateByProduct` - 请求示例: ```json @@ -359,7 +346,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/Submit` - gRPC:`/order.Summary/Submit` -- 白名单键:`order.Summary.Submit` - 请求示例: ```json @@ -389,7 +375,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/Check` - gRPC:`/order.Summary/Check` -- 白名单键:`order.Summary.Check` - 请求示例: ```json @@ -400,7 +385,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/Get` - gRPC:`/order.Summary/Get` -- 白名单键:`order.Summary.Get` - 请求示例: ```json @@ -418,7 +402,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/List` - gRPC:`/order.Summary/List` -- 白名单键:`order.Summary.List` - 请求示例: ```json @@ -434,7 +417,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/Confirm` - gRPC:`/order.Summary/Confirm` -- 白名单键:`order.Summary.Confirm` - 请求示例: ```json @@ -451,7 +433,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/Cancel` - gRPC:`/order.Summary/Cancel` -- 白名单键:`order.Summary.Cancel` - 请求示例: ```json @@ -465,7 +446,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/SimulatePay` - gRPC:`/order.Summary/SimulatePay` -- 白名单键:`order.Summary.SimulatePay` - 请求示例: ```json @@ -480,7 +460,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/SimulateShipments` - gRPC:`/order.Summary/SimulateShipments` -- 白名单键:`order.Summary.SimulateShipments` - 请求示例: ```json @@ -496,7 +475,6 @@ - 动态 HTTP:`POST /rpc/order/Summary/SimulateReceiving` - gRPC:`/order.Summary/SimulateReceiving` -- 白名单键:`order.Summary.SimulateReceiving` - 请求示例: ```json diff --git a/wiki/api/12-wallet.md b/wiki/api/12-wallet.md index 0a87ea9..5fc2486 100644 --- a/wiki/api/12-wallet.md +++ b/wiki/api/12-wallet.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/wallet/{Service}/{Method}` - 原生 gRPC:`/wallet.{Service}/{Method}` - grpc-gateway:`POST /wallet.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -34,7 +34,6 @@ - 动态 HTTP:`POST /rpc/wallet/Alipay/WapPay` - gRPC:`/wallet.Alipay/WapPay` -- 白名单键:`wallet.Alipay.WapPay` - 请求示例: ```json @@ -51,7 +50,6 @@ - 动态 HTTP:`POST /rpc/wallet/Alipay/PagePay` - gRPC:`/wallet.Alipay/PagePay` -- 白名单键:`wallet.Alipay.PagePay` - 请求示例: ```json @@ -68,7 +66,6 @@ - 动态 HTTP:`POST /rpc/wallet/Alipay/AppPay` - gRPC:`/wallet.Alipay/AppPay` -- 白名单键:`wallet.Alipay.AppPay` - 请求示例: ```json @@ -84,7 +81,6 @@ - 动态 HTTP:`POST /rpc/wallet/Alipay/Transfer` - gRPC:`/wallet.Alipay/Transfer` -- 白名单键:`wallet.Alipay.Transfer` - 请求示例: ```json @@ -113,7 +109,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/GetWallet` - gRPC:`/wallet.Basic/GetWallet` -- 白名单键:`wallet.Basic.GetWallet` - 请求示例: ```json @@ -131,7 +126,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/SetPayPassword` - gRPC:`/wallet.Basic/SetPayPassword` -- 白名单键:`wallet.Basic.SetPayPassword` - 请求示例: ```json @@ -145,7 +139,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/BindPaymentId` - gRPC:`/wallet.Basic/BindPaymentId` -- 白名单键:`wallet.Basic.BindPaymentId` - 请求示例: ```json @@ -159,7 +152,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/Transactions` - gRPC:`/wallet.Basic/Transactions` -- 白名单键:`wallet.Basic.Transactions` - 请求示例: ```json @@ -177,7 +169,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/AddBankCard` - gRPC:`/wallet.Basic/AddBankCard` -- 白名单键:`wallet.Basic.AddBankCard` - 请求示例: ```json @@ -194,7 +185,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/GetBankCard` - gRPC:`/wallet.Basic/GetBankCard` -- 白名单键:`wallet.Basic.GetBankCard` - 请求示例: ```json @@ -205,7 +195,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/RmBankCard` - gRPC:`/wallet.Basic/RmBankCard` -- 白名单键:`wallet.Basic.RmBankCard` - 请求示例: ```json @@ -218,7 +207,6 @@ - 动态 HTTP:`POST /rpc/wallet/Basic/ApplyCash` - gRPC:`/wallet.Basic/ApplyCash` -- 白名单键:`wallet.Basic.ApplyCash` - 请求示例: ```json @@ -244,7 +232,6 @@ - 动态 HTTP:`POST /rpc/wallet/Payment/Hello` - gRPC:`/wallet.Payment/Hello` -- 白名单键:`wallet.Payment.Hello` - 请求示例: ```json @@ -255,7 +242,6 @@ - 动态 HTTP:`POST /rpc/wallet/Payment/Way` - gRPC:`/wallet.Payment/Way` -- 白名单键:`wallet.Payment.Way` - 请求示例: ```json @@ -268,7 +254,6 @@ - 动态 HTTP:`POST /rpc/wallet/Payment/Get` - gRPC:`/wallet.Payment/Get` -- 白名单键:`wallet.Payment.Get` - 请求示例: ```json @@ -282,7 +267,6 @@ - 动态 HTTP:`POST /rpc/wallet/Payment/ByOrder` - gRPC:`/wallet.Payment/ByOrder` -- 白名单键:`wallet.Payment.ByOrder` - 请求示例: ```json @@ -301,7 +285,6 @@ - 动态 HTTP:`POST /rpc/wallet/Payment/ByCharge` - gRPC:`/wallet.Payment/ByCharge` -- 白名单键:`wallet.Payment.ByCharge` - 请求示例: ```json @@ -319,7 +302,6 @@ - 动态 HTTP:`POST /rpc/wallet/Payment/Callback` - gRPC:`/wallet.Payment/Callback` -- 白名单键:`wallet.Payment.Callback` - 请求示例: ```json @@ -345,7 +327,6 @@ - 动态 HTTP:`POST /rpc/wallet/Wechat/JsapiPreOrder` - gRPC:`/wallet.Wechat/JsapiPreOrder` -- 白名单键:`wallet.Wechat.JsapiPreOrder` - 请求示例: ```json @@ -363,7 +344,6 @@ - 动态 HTTP:`POST /rpc/wallet/Wechat/AppPreOrder` - gRPC:`/wallet.Wechat/AppPreOrder` -- 白名单键:`wallet.Wechat.AppPreOrder` - 请求示例: ```json @@ -379,7 +359,6 @@ - 动态 HTTP:`POST /rpc/wallet/Wechat/NativePreOrder` - gRPC:`/wallet.Wechat/NativePreOrder` -- 白名单键:`wallet.Wechat.NativePreOrder` - 请求示例: ```json @@ -395,7 +374,6 @@ - 动态 HTTP:`POST /rpc/wallet/Wechat/Transfer` - gRPC:`/wallet.Wechat/Transfer` -- 白名单键:`wallet.Wechat.Transfer` - 请求示例: ```json @@ -412,7 +390,6 @@ - 动态 HTTP:`POST /rpc/wallet/Wechat/WxCallback` - gRPC:`/wallet.Wechat/WxCallback` -- 白名单键:`wallet.Wechat.WxCallback` - 请求示例: ```json diff --git a/wiki/api/13-feed.md b/wiki/api/13-feed.md index 99efee6..71e772b 100644 --- a/wiki/api/13-feed.md +++ b/wiki/api/13-feed.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/feed/{Service}/{Method}` - 原生 gRPC:`/feed.{Service}/{Method}` - grpc-gateway:`POST /feed.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -38,7 +38,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/Fetch` - gRPC:`/feed.Post/Fetch` -- 白名单键:`feed.Post.Fetch` - 请求示例: ```json @@ -55,7 +54,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/Create` - gRPC:`/feed.Post/Create` -- 白名单键:`feed.Post.Create` - 请求示例: ```json @@ -88,7 +86,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/Change` - gRPC:`/feed.Post/Change` -- 白名单键:`feed.Post.Change` - 请求示例: ```json @@ -121,7 +118,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/Remove` - gRPC:`/feed.Post/Remove` -- 白名单键:`feed.Post.Remove` - 请求示例: ```json @@ -135,7 +131,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/CommentList` - gRPC:`/feed.Post/CommentList` -- 白名单键:`feed.Post.CommentList` - 请求示例: ```json @@ -152,7 +147,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/AddComment` - gRPC:`/feed.Post/AddComment` -- 白名单键:`feed.Post.AddComment` - 请求示例: ```json @@ -171,7 +165,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/DeleteComment` - gRPC:`/feed.Post/DeleteComment` -- 白名单键:`feed.Post.DeleteComment` - 请求示例: ```json @@ -185,7 +178,6 @@ - 动态 HTTP:`POST /rpc/feed/Post/Action` - gRPC:`/feed.Post/Action` -- 白名单键:`feed.Post.Action` - 请求示例: ```json @@ -207,7 +199,6 @@ - 动态 HTTP:`POST /rpc/feed/Setting/Info` - gRPC:`/feed.Setting/Info` -- 白名单键:`feed.Setting.Info` - 请求示例: ```json @@ -218,7 +209,6 @@ - 动态 HTTP:`POST /rpc/feed/Setting/Rights` - gRPC:`/feed.Setting/Rights` -- 白名单键:`feed.Setting.Rights` - 请求示例: ```json @@ -237,7 +227,6 @@ - 动态 HTTP:`POST /rpc/feed/Tag/List` - gRPC:`/feed.Tag/List` -- 白名单键:`feed.Tag.List` - 请求示例: ```json @@ -254,7 +243,6 @@ - 动态 HTTP:`POST /rpc/feed/Tag/Create` - gRPC:`/feed.Tag/Create` -- 白名单键:`feed.Tag.Create` - 请求示例: ```json @@ -269,7 +257,6 @@ - 动态 HTTP:`POST /rpc/feed/Tag/PostList` - gRPC:`/feed.Tag/PostList` -- 白名单键:`feed.Tag.PostList` - 请求示例: ```json @@ -295,7 +282,6 @@ - 动态 HTTP:`POST /rpc/feed/Timeline/Recommend` - gRPC:`/feed.Timeline/Recommend` -- 白名单键:`feed.Timeline.Recommend` - 请求示例: ```json @@ -312,7 +298,6 @@ - 动态 HTTP:`POST /rpc/feed/Timeline/Friend` - gRPC:`/feed.Timeline/Friend` -- 白名单键:`feed.Timeline.Friend` - 请求示例: ```json @@ -329,7 +314,6 @@ - 动态 HTTP:`POST /rpc/feed/Timeline/Follow` - gRPC:`/feed.Timeline/Follow` -- 白名单键:`feed.Timeline.Follow` - 请求示例: ```json @@ -346,7 +330,6 @@ - 动态 HTTP:`POST /rpc/feed/Timeline/Hot` - gRPC:`/feed.Timeline/Hot` -- 白名单键:`feed.Timeline.Hot` - 请求示例: ```json diff --git a/wiki/api/14-group.md b/wiki/api/14-group.md index 9e5e9e1..e881700 100644 --- a/wiki/api/14-group.md +++ b/wiki/api/14-group.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/group/{Service}/{Method}` - 原生 gRPC:`/group.{Service}/{Method}` - grpc-gateway:`POST /group.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -34,7 +34,6 @@ - 动态 HTTP:`POST /rpc/group/Basic/Search` - gRPC:`/group.Basic/Search` -- 白名单键:`group.Basic.Search` - 请求示例: ```json @@ -47,7 +46,6 @@ - 动态 HTTP:`POST /rpc/group/Basic/Fetch` - gRPC:`/group.Basic/Fetch` -- 白名单键:`group.Basic.Fetch` - 请求示例: ```json @@ -58,7 +56,6 @@ - 动态 HTTP:`POST /rpc/group/Basic/Get` - gRPC:`/group.Basic/Get` -- 白名单键:`group.Basic.Get` - 请求示例: ```json @@ -72,7 +69,6 @@ - 动态 HTTP:`POST /rpc/group/Basic/Create` - gRPC:`/group.Basic/Create` -- 白名单键:`group.Basic.Create` - 请求示例: ```json @@ -105,7 +101,6 @@ - 动态 HTTP:`POST /rpc/group/Basic/Modify` - gRPC:`/group.Basic/Modify` -- 白名单键:`group.Basic.Modify` - 请求示例: ```json @@ -138,7 +133,6 @@ - 动态 HTTP:`POST /rpc/group/Basic/Disband` - gRPC:`/group.Basic/Disband` -- 白名单键:`group.Basic.Disband` - 请求示例: ```json @@ -164,7 +158,6 @@ - 动态 HTTP:`POST /rpc/group/Member/Fetch` - gRPC:`/group.Member/Fetch` -- 白名单键:`group.Member.Fetch` - 请求示例: ```json @@ -178,7 +171,6 @@ - 动态 HTTP:`POST /rpc/group/Member/DoJoin` - gRPC:`/group.Member/DoJoin` -- 白名单键:`group.Member.DoJoin` - 请求示例: ```json @@ -193,7 +185,6 @@ - 动态 HTTP:`POST /rpc/group/Member/JoinFetch` - gRPC:`/group.Member/JoinFetch` -- 白名单键:`group.Member.JoinFetch` - 请求示例: ```json @@ -204,7 +195,6 @@ - 动态 HTTP:`POST /rpc/group/Member/JoinDoHandle` - gRPC:`/group.Member/JoinDoHandle` -- 白名单键:`group.Member.JoinDoHandle` - 请求示例: ```json @@ -219,7 +209,6 @@ - 动态 HTTP:`POST /rpc/group/Member/DoSetManager` - gRPC:`/group.Member/DoSetManager` -- 白名单键:`group.Member.DoSetManager` - 请求示例: ```json @@ -234,7 +223,6 @@ - 动态 HTTP:`POST /rpc/group/Member/DoKick` - gRPC:`/group.Member/DoKick` -- 白名单键:`group.Member.DoKick` - 请求示例: ```json @@ -249,7 +237,6 @@ - 动态 HTTP:`POST /rpc/group/Member/DoQuit` - gRPC:`/group.Member/DoQuit` -- 白名单键:`group.Member.DoQuit` - 请求示例: ```json diff --git a/wiki/api/15-relation.md b/wiki/api/15-relation.md index 3aab262..7deb0cf 100644 --- a/wiki/api/15-relation.md +++ b/wiki/api/15-relation.md @@ -9,7 +9,7 @@ - 动态 HTTP:`POST /rpc/relation/{Service}/{Method}` - 原生 gRPC:`/relation.{Service}/{Method}` - grpc-gateway:`POST /relation.{Service}/{Method}` -- 鉴权:需要登录的接口通过 `Authorization: Bearer ` 传递凭证。 +- 鉴权:需要登录的接口通过 `Authorization: ` 传递裸 JWT,不添加 `Bearer` 前缀。 - 动态 HTTP 成功或失败均返回 HTTP 200,业务状态见 `code`、`message`、`details`。 ## 服务概览 @@ -33,7 +33,6 @@ - 动态 HTTP:`POST /rpc/relation/Follow/Doing` - gRPC:`/relation.Follow/Doing` -- 白名单键:`relation.Follow.Doing` - 请求示例: ```json @@ -47,7 +46,6 @@ - 动态 HTTP:`POST /rpc/relation/Follow/Undo` - gRPC:`/relation.Follow/Undo` -- 白名单键:`relation.Follow.Undo` - 请求示例: ```json @@ -61,7 +59,6 @@ - 动态 HTTP:`POST /rpc/relation/Follow/State` - gRPC:`/relation.Follow/State` -- 白名单键:`relation.Follow.State` - 请求示例: ```json @@ -75,7 +72,6 @@ - 动态 HTTP:`POST /rpc/relation/Follow/Fetch` - gRPC:`/relation.Follow/Fetch` -- 白名单键:`relation.Follow.Fetch` - 请求示例: ```json @@ -114,7 +110,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/Search` - gRPC:`/relation.Friend/Search` -- 白名单键:`relation.Friend.Search` - 请求示例: ```json @@ -127,7 +122,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/Fetch` - gRPC:`/relation.Friend/Fetch` -- 白名单键:`relation.Friend.Fetch` - 请求示例: ```json @@ -140,7 +134,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/Get` - gRPC:`/relation.Friend/Get` -- 白名单键:`relation.Friend.Get` - 请求示例: ```json @@ -154,7 +147,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ModifyNickname` - gRPC:`/relation.Friend/ModifyNickname` -- 白名单键:`relation.Friend.ModifyNickname` - 请求示例: ```json @@ -168,7 +160,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/DoPopular` - gRPC:`/relation.Friend/DoPopular` -- 白名单键:`relation.Friend.DoPopular` - 请求示例: ```json @@ -182,7 +173,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/UndoPopular` - gRPC:`/relation.Friend/UndoPopular` -- 白名单键:`relation.Friend.UndoPopular` - 请求示例: ```json @@ -196,7 +186,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/Delete` - gRPC:`/relation.Friend/Delete` -- 白名单键:`relation.Friend.Delete` - 请求示例: ```json @@ -210,7 +199,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ApplyFetch` - gRPC:`/relation.Friend/ApplyFetch` -- 白名单键:`relation.Friend.ApplyFetch` - 请求示例: ```json @@ -223,7 +211,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ApplyGet` - gRPC:`/relation.Friend/ApplyGet` -- 白名单键:`relation.Friend.ApplyGet` - 请求示例: ```json @@ -237,7 +224,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ApplyDo` - gRPC:`/relation.Friend/ApplyDo` -- 白名单键:`relation.Friend.ApplyDo` - 请求示例: ```json @@ -252,7 +238,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ApplyDoMessage` - gRPC:`/relation.Friend/ApplyDoMessage` -- 白名单键:`relation.Friend.ApplyDoMessage` - 请求示例: ```json @@ -266,7 +251,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ApplyDoPass` - gRPC:`/relation.Friend/ApplyDoPass` -- 白名单键:`relation.Friend.ApplyDoPass` - 请求示例: ```json @@ -281,7 +265,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/ApplyDoReject` - gRPC:`/relation.Friend/ApplyDoReject` -- 白名单键:`relation.Friend.ApplyDoReject` - 请求示例: ```json @@ -295,7 +278,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/TagFetch` - gRPC:`/relation.Friend/TagFetch` -- 白名单键:`relation.Friend.TagFetch` - 请求示例: ```json @@ -306,7 +288,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/TagMemberFetch` - gRPC:`/relation.Friend/TagMemberFetch` -- 白名单键:`relation.Friend.TagMemberFetch` - 请求示例: ```json @@ -320,7 +301,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/TagDoCreate` - gRPC:`/relation.Friend/TagDoCreate` -- 白名单键:`relation.Friend.TagDoCreate` - 请求示例: ```json @@ -336,7 +316,6 @@ - 动态 HTTP:`POST /rpc/relation/Friend/TagDoUpdate` - gRPC:`/relation.Friend/TagDoUpdate` -- 白名单键:`relation.Friend.TagDoUpdate` - 请求示例: ```json @@ -360,7 +339,6 @@ - 动态 HTTP:`POST /rpc/relation/Match/Fetch` - gRPC:`/relation.Match/Fetch` -- 白名单键:`relation.Match.Fetch` - 请求示例: ```json @@ -377,7 +355,6 @@ - 动态 HTTP:`POST /rpc/relation/Match/Get` - gRPC:`/relation.Match/Get` -- 白名单键:`relation.Match.Get` - 请求示例: ```json @@ -391,7 +368,6 @@ - 动态 HTTP:`POST /rpc/relation/Match/DoJoin` - gRPC:`/relation.Match/DoJoin` -- 白名单键:`relation.Match.DoJoin` - 请求示例: ```json @@ -405,7 +381,6 @@ - 动态 HTTP:`POST /rpc/relation/Match/DoIgnore` - gRPC:`/relation.Match/DoIgnore` -- 白名单键:`relation.Match.DoIgnore` - 请求示例: ```json diff --git a/wiki/api/16-fts-rest.md b/wiki/api/16-fts-rest.md index c19e1c9..b369c22 100644 --- a/wiki/api/16-fts-rest.md +++ b/wiki/api/16-fts-rest.md @@ -8,13 +8,13 @@ |---|---|---|---|---| | GET | `/rest/fts/ping` | 否 | 无 | 健康检查,返回 Pong | | GET | `/rest/fts/config` | 否 | 无 | 获取上传字段、大小和扩展名限制 | -| POST | `/rest/fts/uploader` | Bearer Token | `multipart/form-data` | 上传文件到 local 或 MinIO | +| POST | `/rest/fts/uploader` | JWT | `multipart/form-data` | 上传文件到 local 或 MinIO | ## 上传文件 ```http POST /rest/fts/uploader -Authorization: Bearer +Authorization: Content-Type: multipart/form-data ``` diff --git a/wiki/api/18-mgt-rest.md b/wiki/api/18-mgt-rest.md index 8a53910..76014a8 100644 --- a/wiki/api/18-mgt-rest.md +++ b/wiki/api/18-mgt-rest.md @@ -1,6 +1,6 @@ # MGT REST API -后台用户、应用、角色、权限和部门管理。基础路径:`/rest/mgt`。除匿名接口外均需 Bearer Token;标记“管理员”的路由还会执行管理员权限检查。 +后台用户、应用、角色、权限和部门管理。基础路径:`/rest/mgt`。除匿名接口外均需在 `Authorization` 头直接携带 JWT(不加 `Bearer`);标记“管理员”的路由还会执行管理员权限检查。 ## 匿名接口 @@ -129,4 +129,3 @@ ## 通用响应 接口使用 SDK 统一响应包装,常见数据结构包括:登录 `LoginResp`、分页 `{total,data,page,size}`、创建 `{id,identity}`。客户端必须同时判断 HTTP 状态和响应中的业务 code。 -