asp.net 核心身份服务器 4 只有接受请求的三个自定义域之一

asp.net core identity Server 4 only one of three custom domain accepted for requests

我按照 this guide 设置了我的 asp.net 托管的 blazor wasm 项目,我能够设置所有内容,以便我有多个自定义域,它们都被认为具有有效的 ssl 证书,并且我能够登录到所有这些。 HTTPS 证书生成为 Azure 应用服务托管证书。 IS4 的那个是通过 Azure Key Vault 生成的。

然后奇怪的是,从现在的 3 个域中,只有一个能够向端点发出实际请求。对于其他人,我得到这个例外:

www-authenticate: Bearer error="invalid_token", error_description="颁发者'[Domain]' 无效" 有趣的是,似乎哪个域是有效域几乎是随机的。重新启动后可以再次更改。为了重现,我在 visual studio 中创建了一个具有个人身份验证的新项目,并将其部署到一个新的 Azure 应用程序服务,并添加了两个新域。所以我现在又有 3 个了:

在撰写本文时,.ch 地址是能够发出请求的地址。对于另外两个,当移动到“获取数据”页面时,控制台中只有一个。 我的怀疑是,在重新启动后,发出第一个请求的域可以工作,而其他人则不能。

签名证书是使用以下设置创建的:

我通过 WEBSITE_LOAD_CERTIFICATES 配置加载它。 我还附上了我上传到 azure 的解决方案,尽管它只是在启动期间应用迁移的最小调整。

您可以在此 link 下找到示例(它 link 是我在 ASPNetCore 文档存储库中针对该主题打开的 github 问题:https://github.com/dotnet/AspNetCore.Docs/files/5350494/BlazorApp1.zip

您可以在IdentityServer选项中设置IssuerUri,详情见此页:

https://identityserver4.readthedocs.io/en/latest/reference/options.html

系统中只能有一个发行人,否则会造成混乱...

天蓝色的一个问题是您可能有 public 客户端看到的 public 域,但在内部服务本身看到内部域 namn。如果您在应用程序外部终止 HTTPS/TLS ,则尤其常见。我认为可以将 IssuerUri 设置为客户端用来与之通信的 public 域名。