Indices in the OBJ model are 1-based. You consider this when filling the vectors vertexPositions etc. But you don't use these vectors after that. Using the indices from the OBJ directly as an index buffer won't work. You have to subtract one. As genpfault mentioned in the comments, indices can even be negative for relative referencing.

Face vertices in the OBJ may reference different position and normal ids (and texture coordinate ids). This is something that you cannot represent in OpenGL and you would need to duplicate some data. So this approach will only work if the referenced ids are all the same.