2017-02-17 10 views
0

IDS4をデバッグ・トレースとともに使用すると、ログにはちょっとしたことがあります。クライアント側(Webブラウザ)でIdentityServer4のトークン・エンドポイントに対する無効なHTTP要求

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

私はちょうど

{ "error": "invalid_request" } 

全体のデバッグログを取得:私はそうのように投稿するとき、私は(トークンエンドポイントの不正なHTTPリクエスト)上記のエラーを受信して​​います

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. 

私のコードはかなり疎です。ここ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" } 
     } 
    }; 
    } 
} 

そしてScopes.cs:

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

私はIdentityServerからのトークンの応答を取り戻すちょうど来続けるべきですこのエラーが戻ってきます。何か案は?

答えて

2

それはトークンエンドポイントの不正なHTTPリクエストです;)

は、あなたが仕様を確認しましたか? https://tools.ietf.org/html/rfc6749#section-4.3.2

パラメータはPOST本体に渡されます。

C#でトークンを要求する最も簡単な方法は、私はまだ喜びをのことをしようとしたんが、@Mashton https://github.com/IdentityModel/IdentityModel2

+0

私が必要とするRFCによると、grant_type、username、およびpasswordです。スコープはオプションです。いずれにしても、これらのパラメータで要求を調整しても問題は解決されません。私はいくつかのコードがないと思っています。多分IdentityModelライブラリに必要なものがあるかもしれませんが、私はこの技術に新しいことがあるので、どのように統合するのかが分かりません。 – Rafe

+1

はい。しかし、フォームの投稿として。クエリ文字列パラメータではありません。 – leastprivilege

+0

Webフォームなしでこのクエリを実行できる必要があります。私は後に結果を達成するために間違った方法を使っていると言っていますか? – Rafe

0

scopeあなたの投稿を作成する際にトークンが必要です。あなたのリクエストに&scope=myAPIを含めると、あなたのリクエストは有効と思われます。

+0

おかげlibにIdentityModelクライアントを使用しています。 – Rafe

関連する問題