11

I am getting invalid_scope error in access token request for client credential flow. The error log states that "cannot request OpenID scopes in client credentials flow". I haven't requested for the open id scope. I don't know from where it came from. I need to generate access token using client credential flow.

Issue / Steps to reproduce the problem

API Resource definition.

public IEnumerable GetApiResources() { return new List { new ApiResource { Name = "WidgetApi", DisplayName = "Widget Management API", Description = "Widget Management API Resource Access", ApiSecrets = new List { new Secret("scopeSecret".Sha256()) }, Scopes = new List { new Scope("WidgetApi.Read"), new Scope("WidgetApi.Write") } } }; } 

Client Definition;

return new List { new Client { ClientId = "WidgetApi Client Id", ClientName = "WidgetApi Client credential", RequireConsent = false, AllowedGrantTypes = GrantTypes.ClientCredentials, ClientSecrets = { new Secret( clientSecret.Sha256()) }, // scopes that client has access to AllowedScopes = { "WidgetApi.Read", "WidgetApi.Write"}, AccessTokenLifetime = 3600 }; } 

Access token request body (key - value) using postman

grant_type client_credentials response_type id_token scope WidgetApi.Read WidgetApi.Write client_secret xxxxxxxxxxxxxxxxxxxxxx client_id WidgetApiClientId 

Relevant parts of the log file

dbug: Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection[4] Closing connection to database 'IdentityServer4Db' on server 'localhost\SQLEXPRESS'. dbug: IdentityServer4.EntityFramework.Stores.ResourceStore[0] Found PssUserMgtApi.Read, PssUserMgtApi.Write API scopes in database fail: IdentityServer4.Validation.TokenRequestValidator[0] xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cannot request OpenID scopes in client credentials flow fail: IdentityServer4.Validation.TokenRequestValidator[0] { "ClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "ClientName": "xxxxxxxxxxxxxxxxxxxxxxxxx", "GrantType": "client_credentials", "Scopes": "xxxxxxxxxx.Read xxxxxxxxxxxxx.Write", "Raw": { "grant_type": "client_credentials", "response_type": "id_token", "scope": "xxxxxxxxxxxx.Read xxxxxxxxxxxxx.Write", "client_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "client_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" } } info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2] Request finished in 5292.2873ms 400 application/json dbug: Microsoft.AspNetCore.Server.Kestrel[9] Connection id "0HL51IVGKG792" completed keep alive response. 
3
  • It looks like your client_id is "WidgetApi Client Id", but in the postman you have "WidgetApiClientId"... Commented Mar 29, 2018 at 11:38
  • @MiguelDomingues That should have resulted in Invalid Client error. Commented May 15, 2018 at 11:30
  • Could it be that you've registered WidgetApi.Read and WidgetApi.Write as IdentityResource instead of ApiResource? You will also still get an error asking for id_token for client_credentials flow. You should ask for "token" instead. Commented Dec 5, 2018 at 6:30

5 Answers 5

3

Since there is no user tagged in a client credential flow, normally, client credential is not intended to have a scope tagged to it, and many frameworks doesnt support it.

https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/ says :

scope (optional) : Your service can support different scopes for the client credentials grant. In practice, not many services actually support this.

Sign up to request clarification or add additional context in comments.

Comments

0

Check whether your client credential details are correct or not. You can also find this simple step by step explanation to configure client credential flow using this link

Comments

0

Actually the question already contains the answer:

grant_type client_credentials
response_type id_token
scope WidgetApi.Read WidgetApi.Write
client_secret xxxxxxxxxxxxxxxxxxxxxx
client_id WidgetApiClientId

The request of client_credentials type should be processed at token endpoint and must not require id_token as the flow is non-interactive. The redundant parameter is breaking the flow.

Comments

0

I get this error with IdentityServer4 2.1.3, but not with IdentityServer4 2.3.2. It seems, from the GitHub issues for the project, that it was fixed in 2.3:

https://github.com/IdentityServer/IdentityServer4/issues/2295#issuecomment-405164127

Comments

-1

If you have this problem, just remove the 'openid' scope for a given client in the database in ClientScopes.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.