We had issues today because our OAuth password flow wouldn’t work against one of our sandboxes although the code worked against production. Instead we got this error:
{"error":"invalid_grant","error_description":"authentication failure"}
After Googling and finding this thread it turned out that when using the username/password flow against a sandbox you have to either relax IP restrictions for login or authenticate against test.salesforce.com instead of login.salesforce.com (which of course makes sense).
Below is curl commands for using the username/password flow against a sandbox:
$ curl -d "grant_type=password &client_id=3MVG9X0_oZyBSzHrnzENlR...JSDz0_MiwxyieREuBhtgZJrF7Lzx8542TFpU_ &client_secret=6235860963257688256 &username=mikkel.heisterberg%40example.com.sandboxname &password=Passw0rd.SecurityToken" https://test.salesforce.com/services/oauth2/token {"access_token":"00D6E000000Cpmu!AQ0AQIj4...cGCRqmNnYc6dmgLT09VNoIFXJtHvsPGLqrBs0VlK", "instance_url":"https://someaddress.my.salesforce.com", "id":"https://test.salesforce.com/id/00D6E000000CpmuUAC/0056E000000OCcCQAW", "token_type":"Bearer","issued_at":"1485850119972","signature":"malODIaSULh1siHzdw...pHKjBpWoQcm66UQ="} $curl -H 'Authorization: Bearer 00D6E000000Cpmu!AQ0AQIj4...cGCRqmNnYc6dmgLT09VNoIFXJtHvsPGLqrBs0VlK' https://test.salesforce.com/id/00D6E000000CpmuUAC/0056E000000OCcCQAW {"id":"https://test.salesforce.com/id/00D6E000000CpmuUAC/0056E000000OCcCQAW", "asserted_user":true,"user_id":"0056E000000OCcCQAW","organization_id":"00D6E000000CpmuUAC", "username":"mikkel.heisterberg@example.com.sandboxname","nick_name":"mheis", "display_name":"Mikkel Heisterberg","email":"mheisterberg@foo.com","email_verified":true,"first_name":"Mikkel", "last_name":"Heisterberg","timezone":"Europe/Paris","photos":{"picture":"https://someaddress.content.force.com/profilephoto/005/F", "thumbnail":"https://someaddress.content.force.com/profilephoto/005/T"},"addr_street":null,"addr_city":null,"addr_state":null, "addr_country":null,"addr_zip":null,"mobile_phone":"+45 12345678","mobile_phone_verified":true,"status":{"created_date":null, "body":null},"urls":{"enterprise":"https://someaddress.my.salesforce.com/services/Soap/c/{version}/00D6E000000Cpmu", "metadata":"https://someaddress.my.salesforce.com/services/Soap/m/{version}/00D6E000000Cpmu", "partner":"https://someaddress.my.salesforce.com/services/Soap/u/{version}/00D6E000000Cpmu", "rest":"https://someaddress.my.salesforce.com/services/data/v{version}/", "sobjects":"https://someaddress.my.salesforce.com/services/data/v{version}/sobjects/", "search":"https://someaddress.my.salesforce.com/services/data/v{version}/search/", "query":"https://someaddress.my.salesforce.com/services/data/v{version}/query/", "recent":"https://someaddress.my.salesforce.com/services/data/v{version}/recent/", "profile":"https://someaddress.my.salesforce.com/0056E000000OCcCQAW", "feeds":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/feeds", "groups":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/groups", "users":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/users", "feed_items":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/feed-items", "feed_elements":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/feed-elements", "custom_domain":"https://someaddress.my.salesforce.com"},"active":true,"user_type":"STANDARD","language":"en_US","locale":"en_US", "utcOffset":3600000,"last_modified_date":"2017-01-26T13:49:33.000+0000","is_app_installed":true}