我正在遵循IdentityServer4的快速入门指南来设置受保护的API,并使用客户端(Sample 2)对其进行访问。我正在使用.Net Core + Windows的Docker(Windows容器)来运行我的测试应用程序。
设置应如下所示:
当我致电https://<identity-url>/.well-known/openid-configuration
时,我得到了配置,但前面有一个已知的“不安全-您确定”页面。
API 1
的安全性:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = "https://<identity-url>";
options.RequireHttpsMetadata = this.Environment.IsProduction();
options.ApiName = "api1";
});
和Config.cs
(在IdentityServer
中)根据快速入门的文档。
问题:
当我尝试从API 1
呼叫Client
时,我需要先通过以下方式访问IdentityServer
:
var disco = await DiscoveryClient.GetAsync("https://<identity-url>");
if (disco.IsError)
{
Console.WriteLine(disco.Error);
return BadRequest(disco.Exception);
}
这将导致此错误
根据验证,远程证书无效 程序。
我正在使用.net core templates for web applications
中的默认证书,并且我认为问题与证书是自签名的有关。这是正确的吗?
在另一个容器中信任自签名证书以建立连接的正确方法是什么?
答案 0 :(得分:0)
我使用Web Api和Swagger作为客户端时遇到相同的问题。这不是身份服务器问题,而是SSL限制。如果要使用SSL和https连接到远程服务器上的Ids4,唯一的方法是从CA购买证书。将自签名证书放入信任存储区也将不起作用。您可以改用http协议,但是当然仅出于测试目的。
答案 1 :(得分:0)
您可以为容器添加证书,但这仅可用于外部请求,在容器之间,您将收到错误的证书。根据验证步骤,远程证书无效,因为这不可能验证证书,docker网络是安全的,您可以覆盖该策略以允许http插入https
软件包 IdentityModel 具有扩展方法 GetDiscoveryDocumentAsync ,具有重载功能,以添加允许http
的策略function getName() {
var user = document.getElementById('Username').value;
var pass = document.getElementById('Password').value;
for (let f = 0; f < arr.length; f++) {
if (user == arr[f][0] && pass == arr[f][1]) {
document.write("Welcome back ", user, ", we've missed you");
return; // exit from the function since we've found an account
}
if (user == arr[f][0] && pass != arr[f][0]) {
alert("Your password is incorrect");
return; // exit from the function since we've found a username match
}
}
// couldn't find match, alert
alert("Your account does not exist.");
}