The mistake you're making is that you assume the component which asks for the user credentials is yet another OAuth client, which would indeed lead to a conundrum where one client has to use the Password grant to then allow passwordless authorization/authentication for the other clients.
However, the authentication component is not an OAuth client. It's a part of the authorization server.
For example, if the Authorization Code Grant type is used, then the client who wants access to a resource first redirects the resource owner to the authorization server. The authorization server then somehow authenticates the resource owner and asks whether resource access should be granted to the client. How exactly the authentication procedure looks like isn't defined in OAuth – it could be a classical log-in form asking for a username/e-mail and a password, it could be a page which triggers TLS client certificate authentication, it could be some 2FA solution. This is entirely up to you. After the authorization server has both authenticated the user and established consent, it hands over an authorization code to the client through a redirect.
When you understand that resource owner authentication isn't the job of an OAuth client, it should be clear that no client ever needs to see the owner's credentials. The Resource Owner Password Credentials Grant type is therefore unnecessary in most cases and should be avoided, because it turns the client into an additional entity which knows the resource owner credentials.
Edit: Since it still doesn't seem to be clear why your approach is a bad idea and doesn't really work, I'll try to go into more details.
If I understand you correctly, you envision the following workflow.
+------+
| user |
+------+
|
sends password through log-in form
|
v
+----------------------------+
| SPA acting as OAuth client |
+----------------------------+
|
forwards password through Password Grant
|
v
+----------------------+
| authorization server |
+----------------------+
|
(now some non-OAuth magic happens to authorize the other clients)
|
v
+---------------+
| other clients |
+---------------+
What the workflow according to the OAuth protocol should look like instead (assuming Authorization Code Grant):
+------+
| user |
+------+
|
sends password through log-in form
|
v
+----------------------+
| authorization server |
+----------------------+
|
sends Authorization Code (forwarded by user)
|
v
+--------+
| client |
+--------+
What's the difference, and why is your approach bad?
- You're redefining the OAuth roles and their responsibilities. In OAuth, authenticating users and granting clients access to a resource is the job of the authorization server. You've instead introduced a “master client” which also takes care of authentication and authorization. This is sloppy, redundant and makes the implementation more complex.
- Since you don't use the clients and the authorization server according to specification, you now need to add nonstandard steps to make your scheme work. For example, the idea of a “master client” which authorizes other clients doesn't exist in OAuth, so after the Password Grant has been checked by the authorization server, you need to somehow change the authorization status of all other clients as well. Maybe you send a bulk of access tokens around, maybe you let all clients share the same token – in any case, this has nothing to do with OAuth.
- As you can clearly see in the diagram, you've added an entirely unnecessary level of indirection. Instead of simply letting the user authenticate directly towards the authorization server, they have to send their password to the “master client” which then forwards it to the authorization server. This not only increases the complexity. It also means the “master client” is now an additional entity which knows the user password (besides the authorization server). OAuth is supposed to prevent this exact problem!
- The Password Grant is deprecated and has been completely removed in OAuth 2.1. If your entire scheme depends on this feature, there's clearly a design error.