【问题标题】:Deploying ASP.net Core to Google Cloud AppEngine (Flex) with Microsoft Identity (Authentication) & Roles使用 Microsoft 身份(身份验证)和角色将 ASP.net Core 部署到 Google Cloud AppEngine (Flex)
【发布时间】:2018-06-04 03:22:21
【问题描述】:
我想将一个 ASP.net Core 项目部署到 Google AppEngine (flex)。我的应用程序使用 Microsoft 身份/身份验证并具有 2 种不同类型的角色。在设置项目时,我选择了使用个人用户帐户进行身份验证并“将用户帐户存储在应用程序中”——因此信息存储在本地 SQL 服务器上。我有两个问题:
1) 是否可以将用户帐户存储在远程 SQL 服务器上 - 特别是 Google Cloud SQL?如果是这样,我要编辑哪些文件,正确的语法是什么?我已经尝试调整 appsettings.json 中的连接字符串,但它不起作用(它表示连接到 SQL 服务器时出现问题)。
2) 如果应用按原样部署,本地存储的用户帐户和角色会怎样?他们会转移到 Google Cloud AppEngine 上部署的项目吗?
我对此很陌生,感谢我能得到的任何帮助!谢谢!
【问题讨论】:
标签:
google-app-engine
asp.net-core-2.0
google-cloud-sql
asp.net-core-identity
app-engine-flexible
【解决方案1】:
回答我的第一个问题:
是的,你可以。连接字符串在 appsettings.json 中,例如:
"ConnectionStrings": {"AuthenticationString": "Server=tcp:SERVERNAME,PORTNUMBER;Initial Catalog=authentication;Persist Security Info=False;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"}
并且您在 ConfigureServices 方法中的 startup.cs 中引用它的名称,例如:
options.UseSqlServer(Configuration.GetConnectionString("AuthenticationString")));
我不断收到错误的原因是因为我试图将它存储在远程 MySQL 服务器中(我不知道 Google Cloud SQL 是 MySQL/Postgre SQL,而且我也完全不知道 MySQL 和 (MS)SQL 之间存在差异服务器)。我在启动时引用的UseSqlServer 中的方法显然适用于(MS)SQL Server,但我有一种暗示,如果您想改用MySQL 服务器,也有类似的方法。
(上面的Grimaldo回答了第二个问题)
【解决方案2】:
对于第一个问题,我认为有一些细节需要考虑。
Cloud SQL 被认为具有自己的内置身份验证系统,因此我认为这两个系统的集成为您提供了在两个不同的层中进行身份验证的可能性,即在云中和在您的应用程序中。
因此,我认为正确配置两个身份验证流程以拥有一个功能系统非常重要。
尽管它可能不是您正在使用的应用程序的确切资源,但可能值得查看 .NET 中的 guide 以在 App Engine 中对用户进行身份验证。和how to connect App engine flex with MySQL。这两个步骤对于您的外部和内部应用引擎身份验证至关重要。
对于您的第二个问题,不幸的是,这个过程并不是那么自动的。正如我上面所写,凭据将仅适用于您的应用程序的“内部层”,如果您想将它们全部迁移到外部层(GCP 项目)部署是不够的,您将不得不手动添加他们,或者如果您的组织太大,您将不得不使用自动化的方式来做到这一点。 (即API)