Skip to content

Commit

Permalink
Added tests for MQTT bearer token authentication
Browse files Browse the repository at this point in the history
Signed-off-by: Ángel <angelo.fly1@gmail.com>
  • Loading branch information
angiglesias committed Jan 25, 2021
1 parent 4fd58ef commit 1fba88e
Showing 1 changed file with 75 additions and 0 deletions.
75 changes: 75 additions & 0 deletions server/mqtt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (

"github.com/nats-io/jwt/v2"
"github.com/nats-io/nats.go"
"github.com/nats-io/nkeys"
)

type mqttErrorReader struct {
Expand Down Expand Up @@ -1119,6 +1120,80 @@ func TestMQTTTokenAuth(t *testing.T) {
}
}

func TestMQTTJWTWithAllowedConnectionTypes(t *testing.T) {
o := testMQTTDefaultOptions()
// Create System Account
syskp, _ := nkeys.CreateAccount()
syspub, _ := syskp.PublicKey()
sysAc := jwt.NewAccountClaims(syspub)
sysjwt, err := sysAc.Encode(oKp)
if err != nil {
t.Fatalf("Error generating account JWT: %v", err)
}
mr := &MemAccResolver{}
mr.Store(syspub, sysjwt)
if err != nil {
t.Fatalf("Error saving system account JWT to memory resolver: %v", err)
}
o.SystemAccount = syspub
o.AccountResolver = mr
setupAddTrusted(o)

s := testMQTTRunServer(t, o)
defer testMQTTShutdownServer(s)

for _, test := range []struct {
name string
connectionTypes []string
rc byte
}{
{"not allowed", []string{jwt.ConnectionTypeStandard}, mqttConnAckRCNotAuthorized},
{"allowed", []string{jwt.ConnectionTypeStandard, strings.ToLower(jwt.ConnectionTypeMqtt)}, mqttConnAckRCConnectionAccepted},
{"allowed with unknown", []string{jwt.ConnectionTypeMqtt, "SomeNewType"}, mqttConnAckRCConnectionAccepted},
{"not allowed with unknown", []string{"SomeNewType"}, mqttConnAckRCNotAuthorized},
} {
t.Run(test.name, func(t *testing.T) {

nuc := newJWTTestUserClaims()
nuc.AllowedConnectionTypes = test.connectionTypes
nuc.BearerToken = true

okp, _ := nkeys.FromSeed(oSeed)

akp, _ := nkeys.CreateAccount()
apub, _ := akp.PublicKey()
nac := jwt.NewAccountClaims(apub)
nac.Limits.JetStreamLimits.Consumer = -1
nac.Limits.JetStreamLimits.Streams = -1
nac.Limits.JetStreamLimits.MemoryStorage = 1024 * 1024
ajwt, err := nac.Encode(okp)
if err != nil {
t.Fatalf("Error generating account JWT: %v", err)
}

nkp, _ := nkeys.CreateUser()
pub, _ := nkp.PublicKey()
nuc.Subject = pub
jwt, err := nuc.Encode(akp)
if err != nil {
t.Fatalf("Error generating user JWT: %v", err)
}

addAccountToMemResolver(s, apub, ajwt)

ci := &mqttConnInfo{
cleanSess: true,
user: "ignore_use_token",
pass: jwt,
}

mc, r := testMQTTConnect(t, ci, o.MQTT.Host, o.MQTT.Port)
defer mc.Close()
testMQTTCheckConnAck(t, r, test.rc, false)
})
}
}

func TestMQTTUsersAuth(t *testing.T) {
users := []*User{&User{Username: "user", Password: "pwd"}}
for _, test := range []struct {
Expand Down

0 comments on commit 1fba88e

Please sign in to comment.