C# 登录后Azure AD SSO重定向

C# 登录后Azure AD SSO重定向,c#,asp.net,azure,single-sign-on,azure-active-directory,C#,Asp.net,Azure,Single Sign On,Azure Active Directory,在使用OAUTH和Azure AD进行身份验证后,我无法正确重定向dashboard.aspx页面。当我在VS 2017中调试时,我能够使用我的O365电子邮件和密码登录,重定向工作正常。但是,当我发布到web服务器时,它不会。这一页似乎只是坐在那里,什么也不做。我已尝试将Azure中的重定向URL更改为,但这不起作用。我还在代码隐藏文件中放置了一个重定向语句。我需要部署这个应用程序,这是我需要的最后一部分。这也在使用OWIN。我使用默认的ASP.NET模板启动该项目,并选择了从工作或学校进行身

在使用OAUTH和Azure AD进行身份验证后,我无法正确重定向dashboard.aspx页面。当我在VS 2017中调试时,我能够使用我的O365电子邮件和密码登录,重定向工作正常。但是,当我发布到web服务器时,它不会。这一页似乎只是坐在那里,什么也不做。我已尝试将Azure中的重定向URL更改为,但这不起作用。我还在代码隐藏文件中放置了一个重定向语句。我需要部署这个应用程序,这是我需要的最后一部分。这也在使用OWIN。我使用默认的ASP.NET模板启动该项目,并选择了从工作或学校进行身份验证。 下面是StartUpAuth.cs文件。我将实际重定向域更改为domain.name.com仅用于发布目的。如果代码格式不正确,我深表歉意。每次我尝试,我仍然会被否决,不管是否有4个缩进

namespace HealthScripts
{
    public partial class Startup
    {
        private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
        private static string appKey = ConfigurationManager.AppSettings["ida:ClientSecret"];
        private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
        private static string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
        private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];

        private string authority = aadInstance + tenantId;
        // This is the resource ID of the AAD Graph API.  We'll need this to request a token to call the Graph API.
        private static string graphResourceId = "https://graph.windows.net";

        public void ConfigureAuth(IAppBuilder app)
        {
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions());

            app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                    //RedirectUri = "https://domain.name.com/HealthScripts-Staging/",
                    Notifications = new OpenIdConnectAuthenticationNotifications()
                    {
                        //
                        // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                        //
                        AuthorizationCodeReceived = (context) =>
                        {
                            var code = context.Code;
                            ClientCredential credential = new ClientCredential(clientId, appKey);
                            string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                            AuthenticationContext authContext = new AuthenticationContext(authority, new ADALTokenCache(signedInUserID));
                            AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
                            code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);

                            return Task.FromResult(0);
                        }
                    }
                }
                );

            // This makes any middleware defined above this line run before the Authorization rule is applied in web.config
            app.UseStageMarker(PipelineStage.Authenticate);
        }
    }
}
[Win32Exception(0x80004005):系统找不到指定的文件]
[SqlException(0x80131904):建立与SQL Server的连接时发生网络相关或特定于实例的错误。找不到或无法访问该服务器。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:SQL网络接口,错误:52-找不到本地数据库运行时安装。请验证SQL Server Express是否已正确安装,以及本地数据库运行时功能是否已启用。)]
System.Data.SqlClient.SqlInternalConnectionDS..ctor(DbConnectionPoolIdentity、SqlConnectionString connectionOptions、SqlCredential凭证、对象提供信息、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData重新连接SessionData、DbConnectionPool池、String accessToken、Boolean applyTransientF奥兰多+1379
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项、DbConnectionPoolKey poolKey、Object poolGroupProviderInfo、DbConnectionPool池、DbConnectionOwningConnection、DbConnectionOptions用户选项)+452
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池、DbConnectionOwningObject、DbConnectionOptions选项、DbConnectionPoolKey池键、DbConnectionOptions用户选项)+70
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection-owningObject、DbConnectionOptions-userOptions、DbConnectionInternal-oldConnection)+927
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject、DbConnectionOptions userOptions、DbConnectionInternal oldConnection)+109
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection-owningObject,UInt32-WaitForMultipleObjectStimOut,布尔allowCreate,布尔OnlyOnEckConnection,DbConnectionOptions-userOptions,DbConnectionInternal&connection)+1550
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal和connection)+117
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection所有者连接、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal oldConnection、DbConnectionInternal和connection)+258
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource`1 retry,DbConnectionOptions userOptions)+314
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1重试)+126
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1重试)+255
System.Data.SqlClient.SqlConnection.Open()+128
System.Data.Entity.Infrastructure.InternalDispatcher`1.Dispatch(目标目标,操作`2操作,TInterceptionContext拦截上下文,操作`3执行,操作`3执行)+101
System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection-connection,DbInterceptionContext-interceptionContext)+509
System.Data.Entity.SqlServer.c__DisplayClass33.b__32()+561
System.Data.Entity.SqlServer.c__DisplayClass1.b__0()+15
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1操作)+231
System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection-sqlConnection,Action`1-act)+911
System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(可空`1 commandTimeout,DbConnection-sqlConnection,String-createDatabaseScript)+117
System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection连接,null`1 commandTimeout,StoreItemCollection StoreItemCollection)+211
System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection)+125
System.Data.Entity.Migrations.Dbmigator.EnsureDatabaseExists(操作必须成功访问数据库)+156
System.Data.Entity.Migrations.DbMigrator.Update(字符串targetMigration)+116
System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext InternalContext,Func`3 createMigrator,ObjectContext ObjectContext)+121
System.Data.Entity.Database.Create(DatabaseExistenceState)+292
System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext上下文)+187
System.Data.Entity.Internal.InternalContext.PerforminizationAction(操作操作)+69
System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()+482
System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput输入)+174
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 Action)+269
System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型entityType)+38
System.Data.Entity.Internal.Li