OAuth Resource Owner Password Credentials Flow
On this page
What is the Resource Owner Password Credentials Flow in OAuth 2.0?
The Resource Owner Password Credentials flow (ROPC) is a server to server flow. The user is authenticated by the client passing the username and password in the request. This is an anti-pattern and the flow only exists to provide an outlet for applications that need to be migrated to use OAuth protected APIs, but cannot be re-written.
How ROPC Flow Works
The ROPC flow only exist to support legacy applications. Do not use in new development.
- The Client makes a POST request to the Authorization Server
- The Authorization Server issues the tokens immediately and responds to the client
The user is authenticated in the token request. The Client passes the username and password to the token endpoint. There is no other way to authenticate the user, and multi-factor authentication is not supported by the flow.
The client authenticates in the Token part of the flow. Client authentication can be done in many ways, the most common being client secret. The following authentication mechanisms are supported in Curity:
- No authentication (public client)
- Secret in post body
- Secret using basic Authentication
- Client Assertion JWT
- Mutual TLS (mTLS) client certificate
- Asymmetric Key
- Symmetric Key
- Credential Manager
- JWKS URI
An ROPC client can not be configured as a public client with no authentication.
The Access Token
The Access Token is returned by the token endpoint. It is the token that later can be used to call the API and gain access. It is a Bearer token, and must not be sent to untrusted parties. The access token usually have a lifetime of 5-30 minutes.
The Refresh Token
The Refresh Token is issued if the client is configured to have refresh tokens. This token can be used to obtain more access tokens once the first one expires. The refresh token may have a very long lifetime, ranging from hours to years.
The Token Endpoint
- Response Type:
|client_id||The Client ID||yes||The ID of the requesting client|
|client_secret||The client secret||yes*||The secret of the client. *Mandatory if client authentication is of type secret, and the authentication is not done using basic authentication|
|grant_type||yes||Tells the token endpoint to do perform the resource owner password credential flow.|
|scope||Space separated string of scopes||no||List the scopes the client is requesting access to.|
|username||the username||yes||The username of the resource owner|
|password||the user password||yes||The password of the resource owner|
- Response Type:
|access_token||A newly issued access token||yes||The resulting access token for the flow|
|refresh_token||A newly issued refresh token||no||Only issued if the client is configured to receive refresh tokens|
|expires_in||Expiration in seconds||yes||The time to live of the access token in seconds|
|scope||Space separated string||no||If not present the requested scopes where issued. If present the issued scopes may differ from the requested scopes.|
|token_type||yes||Describes how the token can be used. Most commonly Bearer token usage.|
Join our Newsletter
Get the latest on identity management, API Security and authentication straight to your inbox.
Start Free Trial
Try the Curity Identity Server for Free. Get up and running in 10 minutes.Start Free Trial