docker中的asp.net核心需要Https

docker中的asp.net核心需要Https,docker,asp.net-core,https,.net-core,identityserver4,Docker,Asp.net Core,Https,.net Core,Identityserver4,我有一个部署到docker的ASP.Net核心应用程序。 此ASP.Net应用程序充当identity server 4以交付客户端令牌。 此外,我还有一个简单的c#客户端(console.net core 2.1),它向这个ASP.net应用程序发出发现请求并收集元数据,例如端点 在本地,一切都正常工作,identity server或客户端正在运行,并且我从identity server api在客户端得到响应 我将identity server api部署到docker并运行了它。它工作正

我有一个部署到docker的ASP.Net核心应用程序。 此ASP.Net应用程序充当identity server 4以交付客户端令牌。 此外,我还有一个简单的c#客户端(console.net core 2.1),它向这个ASP.net应用程序发出发现请求并收集元数据,例如端点

在本地,一切都正常工作,identity server或客户端正在运行,并且我从identity server api在客户端得到响应

我将identity server api部署到docker并运行了它。它工作正常,我可以浏览索引页面,如下图所示:

但当我尝试运行客户端从identity server api(托管在docker上)请求令牌时,它会抛出一个异常(需要Https)-请参见下图:

如何绕过此HTTPs要求?或者我需要在本地创建证书吗?是否有任何文件指导我如何做到这一点

编辑:

如果我尝试通过https调用,则会出现以下错误:

这实际上是有道理的,因为我们没有配置ssl端口

另一点:

在我执行docker run命令以在容器中运行应用程序并公开端口5000之后,我只得到容器现在正在侦听端口80(http)的信息。实际上应该在哪里配置两者(http和https),对吗?据我所知(我不是这方面的专家)。如图所示:


非常感谢您的帮助。

我自己解决了这个问题。因此,如果任何机构面临同样的问题,你可以在这里找到解决方案

这实际上是DiscoveryClient类和GetAsync方法的问题:

DiscoveryClient.GetAsync
我切换到一个正常的
PostAsync
请求,它成功了。这是我的代码:

与其称之为:

 var discoveryClient = await DiscoveryClient.GetAsync("http://url-or-machine-ip:portnumber");
 var token = new TokenClient(discoveryClient.TokenEndpoint, "my-client-id", "my-secret");
 var response = await token.RequestClientCredentialsAsync("my-api-name");
我编写了自己的post请求方法:

private static string GetApiToken()
{
   using (var client = new HttpClient())
   {
     //setup client
     client.BaseAddress = new Uri("http://url-or-machine-ip:portnumber");
     client.DefaultRequestHeaders.Accept.Clear();
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

     //setup login data
     var formContent = new FormUrlEncodedContent(new[]
     {
        new KeyValuePair<string, string>("grant_type", "client_credentials"),
        new KeyValuePair<string, string>("client_id", "my-client-id"),
        new KeyValuePair<string, string>("client_secret", "my-secret"),
        new KeyValuePair<string, string>("scope", "my-api-name")
     });

     //send request
     var responseMessage = client.PostAsync("connect/token", formContent).Result;

     if (responseMessage.IsSuccessStatusCode)
     {
        //get access token from response body
        var responseJson = responseMessage.Content.ReadAsStringAsync().Result;
        var jObject = JObject.Parse(responseJson);
        return jObject.GetValue("access_token").ToString();
      }

      return string.Empty;
   }
 }
我从托管/部署到docker容器的identity server获得令牌:


那么答案肯定是使用HTTPS吗?逻辑上是的,前提是我知道如何在本地将其配置为使用HTTPS。我对我的问题进行了编辑以使其更清楚:)您不能绕过这一点,只需调用安全端点:
var discoveryClient=wait discoveryClient.GetAsync(“https:…”)@RuardvanElburg我已经试过了。实际上,首先想到的是使用https,但它给出了一个错误。我将把它粘贴到问题中。@RuardvanElburg问题编辑
var token = GetApiToken();
  var disco = await client.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest()
            {
                Address = tokenUrl,
                Policy = { RequireHttps = false }
            });