部署后身份服务器出现多个问题
identity server multiple issues after deployment
我目前的设置是这样的。整个项目是使用这里的官方文档构建的 - https://identityserver4.readthedocs.io/en/latest/
- API 服务器
- 具有本地登录、google 登录和 github 登录的身份验证服务器
- 基于控制台的 c# 客户端
- 基于 JS 的客户端
- 基于 MVC 的客户端。
(全部,如官方文档所述)
在本地,它们都工作得很好。能够登录、访问 api 端点、注销、重定向,整个过程都很顺利。
我已经将所有 5 个部署到五个不同的 Azure Web 应用程序。他们都有可供使用的标准 xyz.azurewebsites.net 域。现在,我 运行 遇到了一些问题。
控制台 C# 客户端能够与部署的 auth 服务器对话,使用 auth 服务器上的本地帐户收集令牌,并调用部署的 API 服务器。基于此,我假设 api 服务器和身份验证服务器都应该协同工作。
问题 #1 - JS 客户端一直说
'The login is blocked because of CORS Missing Allow Origin '
问题 #2 - MVC 客户端加载授权服务器,然后授权服务器给我这个错误。
Sorry, there was an error : unauthorized_client
Request Id: 80005c0f-0000-eb00-b63f-84710c7967bb
注意:我已经在 auth 服务器上设置了 CORS 策略,这两个客户端都在客户端定义下,如下所示。我不太关心保持 auth 服务器打开,所以不要介意是否有任何域可以调用 auth 服务器。
AllowedCorsOrigins = { "*.*" },
另请注意:我已在部署前在代码中设置了 URLS。所有 loclahost:port 数字行已正确替换为相应的现已发布的 URL。
那么,我在这里错过了什么?
更新 1
我能够解决 CORS 问题。在这里发布了另一个问题的答案。
更新 2
所以,现在 JS 客户端和 MVC 客户端都给出了相同的错误。
抱歉,出现错误:unauthorized_client
请求 ID:80005c0f-0000-eb00-b63f-84710c7967bb
更新 3
我已经打开了一个有日志详细信息的问题。
https://github.com/IdentityServer/IdentityServer4/issues/4691
我不确定这是否算作答案,但发帖是为了解决我自己的问题,因为它可能会对其他人有所帮助。此外,这只是目前的猜测。
我发现重定向永久存储在我用于 EF 迁移的数据库中。这意味着,本地内存重定向无论如何都会被数据库存储的迁移覆盖。我相信这就是问题所在。
我还意识到控制台应用程序工作正常,因为它不依赖于重定向 URL,而基于 JS 和 MVC 的客户端不起作用,因为它们确实依赖于重定向 URL。
在这一点上,对您(如果您使用 EF 迁移来存储您的身份验证服务器配置)最好的办法是重新开始数据库并切换到仅在内存中。或者,您可以尝试更新数据库以满足您的部署要求。
最终,我相信,除非绝对必要,否则请将身份验证服务器配置(如重定向和 CORS 设置)保存在内存中,因为它们不会占用太多价值并且很少更改。
我目前的设置是这样的。整个项目是使用这里的官方文档构建的 - https://identityserver4.readthedocs.io/en/latest/
- API 服务器
- 具有本地登录、google 登录和 github 登录的身份验证服务器
- 基于控制台的 c# 客户端
- 基于 JS 的客户端
- 基于 MVC 的客户端。
(全部,如官方文档所述)
在本地,它们都工作得很好。能够登录、访问 api 端点、注销、重定向,整个过程都很顺利。
我已经将所有 5 个部署到五个不同的 Azure Web 应用程序。他们都有可供使用的标准 xyz.azurewebsites.net 域。现在,我 运行 遇到了一些问题。 控制台 C# 客户端能够与部署的 auth 服务器对话,使用 auth 服务器上的本地帐户收集令牌,并调用部署的 API 服务器。基于此,我假设 api 服务器和身份验证服务器都应该协同工作。
问题 #1 - JS 客户端一直说
'The login is blocked because of CORS Missing Allow Origin '
问题 #2 - MVC 客户端加载授权服务器,然后授权服务器给我这个错误。
Sorry, there was an error : unauthorized_client
Request Id: 80005c0f-0000-eb00-b63f-84710c7967bb
注意:我已经在 auth 服务器上设置了 CORS 策略,这两个客户端都在客户端定义下,如下所示。我不太关心保持 auth 服务器打开,所以不要介意是否有任何域可以调用 auth 服务器。
AllowedCorsOrigins = { "*.*" },
另请注意:我已在部署前在代码中设置了 URLS。所有 loclahost:port 数字行已正确替换为相应的现已发布的 URL。
那么,我在这里错过了什么?
更新 1
我能够解决 CORS 问题。在这里发布了另一个问题的答案。
更新 2
所以,现在 JS 客户端和 MVC 客户端都给出了相同的错误。
抱歉,出现错误:unauthorized_client 请求 ID:80005c0f-0000-eb00-b63f-84710c7967bb
更新 3
我已经打开了一个有日志详细信息的问题。
https://github.com/IdentityServer/IdentityServer4/issues/4691
我不确定这是否算作答案,但发帖是为了解决我自己的问题,因为它可能会对其他人有所帮助。此外,这只是目前的猜测。
我发现重定向永久存储在我用于 EF 迁移的数据库中。这意味着,本地内存重定向无论如何都会被数据库存储的迁移覆盖。我相信这就是问题所在。
我还意识到控制台应用程序工作正常,因为它不依赖于重定向 URL,而基于 JS 和 MVC 的客户端不起作用,因为它们确实依赖于重定向 URL。
在这一点上,对您(如果您使用 EF 迁移来存储您的身份验证服务器配置)最好的办法是重新开始数据库并切换到仅在内存中。或者,您可以尝试更新数据库以满足您的部署要求。
最终,我相信,除非绝对必要,否则请将身份验证服务器配置(如重定向和 CORS 设置)保存在内存中,因为它们不会占用太多价值并且很少更改。