簡體   English   中英

Asp.net 會員提供程序無法連接到內部部署 SQL 服務器部署到 Azure 應用程序服務

[英]Asp.net Membership provider fails to connect to on premise SQL Server when deployed to Azure app service

我正在嘗試將我的 asp.net MVC (V 4.0/.Net Framework 4.5) 之一移植到 Azure 作為應用程序服務。 我的數據庫是 SQL Server,我的應用程序使用Hybrid Connection連接到它。 我的應用程序使用 SQL 身份驗證連接到數據庫。 當部署到我們本地托管服務器之一上的 IIS 服務器時,一切正常,但當作為應用服務部署到 Azure 時,身份驗證功能會中斷。

我的 controller 代碼:

[HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public virtual ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                //var v = Membership.GetAllUsers();
                try
                {
                    if (Membership.ValidateUser(model.UserName, model.Password))
                    {
                        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                        if (Url.IsLocalUrl(returnUrl))
                        {
                            return Redirect(returnUrl);
                        }
                        else
                        {
                            return RedirectToAction("Index", "Home");
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("", "The user name or password provided is incorrect.");
                    }
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("", ex.ToString());
                }
                
            }

Azure 報錯:

System.Data.SqlClient.SqlException (0x80131904):用戶“OSUser”登錄失敗。 at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager )在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 選項,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions) DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionPool。 在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultiple8117 允許 16,18 ,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&連接)在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource 1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource重試,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 連接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpen ConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 重試,DbConnectionOptions userOptions)在 System.Data.SqlClient.SqlOpenInConnection(。 TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource 1 重試)在 System.Data.SqlClient.SqlConnection.Open() 在 System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext 上下文,Boolean revertImpersonate)在系統.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation) at System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) at System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) at System.Web .Security.SqlMembershipProvider.ValidateUser(String username, String password) 在 WebMatrix.WebData.SimpleMembershipProvider.ValidateUser(String username, String password) 在 USC.Controllers.AccountController.Login(LoginModel model, String returnUrl) 在 D:\a\1 \s\USC\Controllers\AccountController.cs:第 36 行 ClientConnectionId:b1f6b763-80f6-47f0-9a50-c70ab30635bd 錯誤號:18456,State:1,Class:14

有任何想法嗎??? 謝謝!

消息“用戶登錄失敗”是一條一般錯誤消息,可能有多種原因。 出於安全原因,發送給客戶端的錯誤消息不包含有關登錄失敗原因的信息。

您需要授予此用戶登錄 SQL 服務器的權限以及訪問數據庫的權限: 創建登錄 - SQL 服務器

您連接的數據庫可能是在您部署應用程序時使用舊版本的 .NET Framework 的 as.net regsql.exe 工具生成的。 嘗試使用您在本地使用的相同版本的 as.net regsql 來創建和配置成員數據庫。 也許您只是在本地使用了 SQL Express 和 /App Data 文件夾。

在兩個數據庫中,比較表結構。 請比較 AspNet 成員表。

您甚至可以參考:System.Data.SqlClient.SqlException: 用戶登錄失敗 | ASP.NET論壇

疑難解答:用戶“x”登錄失敗 | 微軟文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM