docker中的asp.net核心需要Https
我有一个部署到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),对吗?据我所知(我不是这方面的专家)。如图所示: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并运行了它。它工作正
非常感谢您的帮助。我自己解决了这个问题。因此,如果任何机构面临同样的问题,你可以在这里找到解决方案 这实际上是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 }
});