diff --git a/pkg/client/object.go b/pkg/client/object.go index 62fa701..1784af3 100644 --- a/pkg/client/object.go +++ b/pkg/client/object.go @@ -1006,7 +1006,14 @@ func (c Client) attachV2SessionToken(opts callOptions, hdr *v2session.RequestMet return nil } - token := opts.session.ToV2() + // Do not resign already prepared session token + if opts.session.Signature() != nil { + hdr.SetSessionToken(opts.session.ToV2()) + return nil + } + + token := new(v2session.SessionToken) + token.SetBody(opts.session.ToV2().GetBody()) opCtx := new(v2session.ObjectSessionContext) opCtx.SetAddress(info.addr) diff --git a/pkg/token/session.go b/pkg/token/session.go index 6ff3753..d9e1c47 100644 --- a/pkg/token/session.go +++ b/pkg/token/session.go @@ -1,6 +1,7 @@ package token import ( + "github.com/nspcc-dev/neofs-api-go/pkg" "github.com/nspcc-dev/neofs-api-go/pkg/owner" "github.com/nspcc-dev/neofs-api-go/v2/session" ) @@ -68,3 +69,10 @@ func (t *SessionToken) SetSessionKey(v []byte) { body.SetSessionKey(v) }) } + +func (t *SessionToken) Signature() *pkg.Signature { + return pkg.NewSignatureFromV2( + (*session.SessionToken)(t). + GetSignature(), + ) +}