It might seem a little odd, but the group-level parameters as stored as the (J + 1)th item internally. So in your case with the mirt.model syntax you can specify constraints with the index of 9. Here's and example with J = 15 items:
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))
model <- model.mnrm<-mirt.model("F1=1-15
F2=1-15
COV=F1*F2
CONSTRAINB = (16, COV_21")
mod_configural <- multipleGroup(dat, model, group = group) #completely separate analyses
coef(mod_configural, simplify=TRUE)
If you didn't know that COV_21 was the correct parameter, check the starting value names first by passing multipleGroup(..., pars = 'values'). HTH.