[added] support for StrictSigningKeyUsage and updated jwt library (#1845)

This will cause the server to not trust accounts/user signed by an
identity key

The boot strapping system account will assume the account is issued by
the operator.
If this is not desirable, the system account can be provided right away
as resolver_preload.

[fixes] crash when the system account uses signing keys and an update changes that key set.

Signed-off-by: Matthias Hanel <mh@synadia.com>
This commit is contained in:
Matthias Hanel
2021-01-26 17:49:58 -05:00
committed by GitHub
parent 695539c922
commit dea9effa8d
12 changed files with 188 additions and 61 deletions

View File

@@ -148,7 +148,7 @@ func NewAccountClaims(subject string) *AccountClaims {
c.Limits = OperatorLimits{
NatsLimits{NoLimit, NoLimit, NoLimit},
AccountLimits{NoLimit, NoLimit, true, NoLimit, NoLimit},
JetStreamLimits{NoLimit, NoLimit, NoLimit, NoLimit}}
JetStreamLimits{0, 0, 0, 0}}
c.Subject = subject
return c
}

View File

@@ -43,6 +43,8 @@ type Operator struct {
SystemAccount string `json:"system_account,omitempty"`
// Min Server version
AssertServerVersion string `json:"assert_server_version,omitempty"`
// Signing of subordinate objects will require signing keys
StrictSigningKeyUsage bool `json:"strict_signing_key_usage,omitempty"`
GenericFields
}
@@ -174,7 +176,7 @@ func (oc *OperatorClaims) DidSign(op Claims) bool {
}
issuer := op.Claims().Issuer
if issuer == oc.Subject {
return true
return !oc.StrictSigningKeyUsage
}
return oc.SigningKeys.Contains(issuer)
}