Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invalid HTTP request for token endpoint in IdentityServer4

Using IDS4 with debug tracing, the log only gives me a little bit to go on. I'm receiving the above error (Invalid HTTP request for token endpoint) when I post like so:

Request starting HTTP/1.1 POST http://localhost:5000/connect/token?grant_type=password&client_id=resClient&client_secret=TopSecret&username=admin&password=admin123

On the client side (web browser) I just get

{ "error": "invalid_request" }

The whole debug log looks like this:

dbug: Microsoft.AspNetCore.Server.Kestrel[1]
      Connection id "0HL2NGBR0Q1O4" started.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 POST http://localhost:5000/connect/token?grant_type=password&client_id=resClient&client_secret=TopSecret&username=admin&password=admin123  0
dbug: Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware[9]
      AuthenticationScheme: idsrv was not authenticated.
dbug: IdentityServer4.Hosting.EndpointRouter[0]
      Request path /connect/token matched to endpoint type Token
dbug: IdentityServer4.Hosting.EndpointRouter[0]
      Mapping found for endpoint: Token, creating handler: IdentityServer4.Endpoints.TokenEndpoint
info: IdentityServer4.Hosting.IdentityServerMiddleware[0]
      Invoking IdentityServer endpoint: IdentityServer4.Endpoints.TokenEndpoint for /connect/token
trce: IdentityServer4.Endpoints.TokenEndpoint[0]
      Processing token request.
warn: IdentityServer4.Endpoints.TokenEndpoint[0]
      Invalid HTTP request for token endpoint
trce: IdentityServer4.Hosting.IdentityServerMiddleware[0]
      Invoking result: IdentityServer4.Endpoints.Results.TokenErrorResult
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 348.2168ms 400 application/json
dbug: Microsoft.AspNetCore.Server.Kestrel[9]
      Connection id "0HL2NGBR0Q1O4" completed keep alive response.

My code is pretty sparse. Here's the Startup.cs:

namespace IDServer4Test
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddIdentityServer()
            .AddTemporarySigningCredential()
            .AddInMemoryClients(Configurations.Clients.GetClients())
            .AddInMemoryApiResources(Configurations.Scopes.GetApiResources());
            services.AddTransient<IResourceOwnerPasswordValidator, Configurations.ResourceOwnerPasswordValidator>();
            services.AddTransient<IProfileService, Configurations.ProfileService>();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(LogLevel.Trace);

            app.UseIdentityServer();
        }
    }
}

Clients.cs:

public class Clients
{
    public static IEnumerable<Client> GetClients()
    {
        return new List<Client>
    {
        new Client
        {
            ClientId = "resClient",
            ClientSecrets = { new Secret("TopSecret".Sha256()) },

            AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
            AllowedScopes = { "myAPI" }
        }
    };
    }
}

And Scopes.cs:

public class Scopes
{
    public static IEnumerable<ApiResource> GetApiResources()
    {
        return new List<ApiResource>
        {
            new ApiResource("myAPI", "My API")
        };
    }
}

I should be getting back a token response from IdentityServer but just keeps coming back with this error. Any ideas?

like image 619
Rafe Avatar asked Dec 23 '22 20:12

Rafe


1 Answers

It's an invalid HTTP request for the token endpoint ;)

Have you checked the spec? https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2

Parameters are passed in the POST body.

The easiest way to request tokens in C# is using the IdentityModel client lib https://github.com/IdentityModel/IdentityModel2

like image 130
leastprivilege Avatar answered Dec 28 '22 05:12

leastprivilege