diff --git a/controller/northbound/server/auth_interceptor_test.go b/controller/northbound/server/auth_interceptor_test.go
index 1bf696bd36959cfac6a0b38f0106999607f84c20..2d975d9191ad0c6c84ecf396e2e07df87046b43b 100644
--- a/controller/northbound/server/auth_interceptor_test.go
+++ b/controller/northbound/server/auth_interceptor_test.go
@@ -2,14 +2,13 @@ package server
 
 import (
 	"context"
+	"fmt"
 	"log"
 	"net"
 	"testing"
 
 	apb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac"
 	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
-	"code.fbi.h-da.de/danet/gosdn/controller/rbac"
-	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/credentials/insecure"
 	"google.golang.org/grpc/metadata"
@@ -37,29 +36,16 @@ func dialer() func(context.Context, string) (net.Conn, error) {
 }
 
 func TestAuthInterceptor_Unary(t *testing.T) {
-	validToken, err := jwt.GenerateToken(rbac.User{UserName: "testAdmin"})
+	validToken, err := createTestUserToken("testAdmin", true)
 	if err != nil {
 		log.Fatal(err)
 	}
 
-	wrongUserToken, err := jwt.GenerateToken(rbac.User{UserName: "foo"})
+	wrongUserToken, err := createTestUserToken("foo", false)
 	if err != nil {
 		log.Fatal(err)
 	}
 
-	user, err := userc.Get(store.Query{Name: "testAdmin"})
-	if err != nil {
-		log.Fatal(err)
-	}
-	user.SetToken(validToken)
-
-	err = userc.Update(user)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	md := metadata.Pairs("authorize", validToken)
-
 	ctx := context.Background()
 	conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
 	if err != nil {
@@ -82,7 +68,7 @@ func TestAuthInterceptor_Unary(t *testing.T) {
 		{
 			name: "default unary interceptor",
 			args: args{
-				ctx:     metadata.NewOutgoingContext(context.Background(), md),
+				ctx:     metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorize", validToken)),
 				request: &apb.GetUsersRequest{},
 			},
 			want: &apb.GetUsersResponse{
@@ -136,23 +122,10 @@ func TestAuthInterceptor_Unary(t *testing.T) {
 }
 
 func TestAuthInterceptor_Stream(t *testing.T) {
-	validToken, err := jwt.GenerateToken(rbac.User{UserName: "testAdmin"})
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	user, err := userc.Get(store.Query{Name: "testAdmin"})
+	validToken, err := createTestUserToken("testAdmin", true)
 	if err != nil {
 		log.Fatal(err)
 	}
-	user.SetToken(validToken)
-
-	err = userc.Update(user)
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	md := metadata.Pairs("authorize", validToken)
 
 	ctx := context.Background()
 	conn, err := grpc.DialContext(ctx, "", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithContextDialer(dialer()))
@@ -175,7 +148,7 @@ func TestAuthInterceptor_Stream(t *testing.T) {
 		{
 			name: "default stream interceptor",
 			args: args{
-				ctx: metadata.NewOutgoingContext(context.Background(), md),
+				ctx: metadata.NewOutgoingContext(context.Background(), metadata.Pairs("authorize", validToken)),
 				request: &spb.GetSchemaRequest{
 					Pid: pndID,
 					Sid: sbiID,
@@ -212,3 +185,64 @@ func TestAuthInterceptor_Stream(t *testing.T) {
 		})
 	}
 }
+
+func TestAuthInterceptor_authorize(t *testing.T) {
+	validToken, err := createTestUserToken("testAdmin", true)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	wrongUserToken, err := createTestUserToken("foo", false)
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	md := metadata.Pairs("authorize", validToken)
+	fmt.Println(md.Get("authorize"))
+
+	type args struct {
+		ctx    context.Context
+		method string
+	}
+	tests := []struct {
+		name    string
+		args    args
+		wantErr bool
+	}{
+		{
+			name: "default authorize",
+			args: args{
+				ctx:    metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorize", validToken)),
+				method: "/gosdn.rbac.UserService/GetUsers",
+			},
+			wantErr: false,
+		},
+		{
+			name: "error invalid token",
+			args: args{
+				ctx:    metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorize", wrongUserToken)),
+				method: "/gosdn.rbac.UserService/GetUsers",
+			},
+			wantErr: true,
+		},
+		{
+			name: "error no permission for request",
+			args: args{
+				ctx:    metadata.NewIncomingContext(context.Background(), metadata.Pairs("authorize", validToken)),
+				method: "/gosdn.pnd.PndService/DeleteOnd",
+			},
+			wantErr: true,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			auth := &AuthInterceptor{
+				jwtManager: jwt,
+			}
+
+			if err := auth.authorize(tt.args.ctx, tt.args.method); (err != nil) != tt.wantErr {
+				t.Errorf("AuthInterceptor.authorize() error = %v, wantErr %v", err, tt.wantErr)
+			}
+		})
+	}
+}
diff --git a/controller/northbound/server/test_util_test.go b/controller/northbound/server/test_util_test.go
index 6da586aa99dcbaacbf70bffb0432b2dea4495189..96992775cf3d5a1033dae8fd20ab021658bdd9e0 100644
--- a/controller/northbound/server/test_util_test.go
+++ b/controller/northbound/server/test_util_test.go
@@ -6,6 +6,7 @@ import (
 	"testing"
 
 	"code.fbi.h-da.de/danet/gosdn/controller/rbac"
+	"code.fbi.h-da.de/danet/gosdn/controller/store"
 	"github.com/google/uuid"
 )
 
@@ -136,3 +137,27 @@ func patchLogger(t *testing.T) {
 		log.SetOutput(orig)
 	})
 }
+
+// Creates a token to be used in auth interceptor tests. If validTokenRequired is set as true, the generated token will also
+// be attached to the provided user. Else the user won't have the token and can not be authorized.
+func createTestUserToken(userName string, validTokenRequired bool) (string, error) {
+	token, err := jwt.GenerateToken(rbac.User{UserName: userName})
+	if err != nil {
+		return token, err
+	}
+
+	if validTokenRequired {
+		user, err := userc.Get(store.Query{Name: userName})
+		if err != nil {
+			return token, err
+		}
+		user.SetToken(token)
+
+		err = userc.Update(user)
+		if err != nil {
+			return token, err
+		}
+	}
+
+	return token, nil
+}