2

私はIdentityServer4を学ぼうとしているので、ここのドキュメントから始めましたhttps://identityserver4.readthedocs.io/en/dev/quickstarts/0_overview.htmlそしてこれで終わりましたhttps://identityserver4.readthedocs.io/en/dev/ quickstarts/1_client_credentials.html .

http を使用している限り、すべてがうまく機能しますが、https の使用に切り替えるとすぐに、クライアント テスターのコードの最初の行

var disco = await DiscoveryClient.GetAsync("https://localhost:44384");

ハングし、最終的にタスクがキャンセルされた例外を受け取ります。

すべてをhttpに戻すだけで、再び機能し始めます。

実際の IdentityServer ソリューションでは、launchSettings.json で applicationUrl と launchUrl を変更しました。

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "https://localhost:44384/",
      "sslPort": 44384
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Mvcg.IdentityServer": {
      "commandName": "Project",
      "launchUrl": "https://localhost:44384",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

そして Program.cs の .UseUrls

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseUrls("https://localhost:44384")
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

クライアント ソリューションでは、上記のように、検出エンドポイントを呼び出すコードを http の代わりに https を使用するように変更しました。

var disco = await DiscoveryClient.GetAsync("https://localhost:44384");

明確にするために、記載されているすべての項目を http と https の間で変更するだけで、http では機能しますが、https では機能しません。2 つのテスト間で他に何も変更はありません。

https が機能しない原因となっているものはありますか?

4

1 に答える 1

0

問題はコンソール ホスティングにあるようです。IIS Express で IdentityServer ホストを実行している限り、すべて正常に動作します。コンソールホスティングに切り替えようとするたびに失敗します。ホスティング コンソールに表示されるエラーは次のとおりです。

info: Microsoft.AspNetCore.Server.Kestrel[17]
      Connection id "0HKVQ4SEO0GOI" bad request data: "The input string contains non-ASCII or null characters."
Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException: The input string contains non-ASCII or null characters.
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIteratorExtensions.GetAsciiString(MemoryPoolIterator start, MemoryPoolIterator end)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.TakeStartLine(SocketInput input)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.<RequestProcessingAsync>d__2.MoveNext()
warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Connection processing ended abnormally
Microsoft.AspNetCore.Server.Kestrel.BadHttpRequestException: The input string contains non-ASCII or null characters.
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure.MemoryPoolIteratorExtensions.GetAsciiString(MemoryPoolIterator start, MemoryPoolIterator end)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame.TakeStartLine(SocketInput input)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.<RequestProcessingAsync>d__2.MoveNext()

そのエラーを正確に修正する方法がわからないので、今のところ、先に進むために IIS Express でホストする必要があります。

于 2016-10-22T03:00:40.667 に答える