通过 Visual Studio 发布 Azure 应用服务失败
Publishing Azure App Service via Visual Studio fails
我正在 Publish the server project
之后发布我的 Azure 应用服务(.Net 后端)
这曾经有效,但现在我无法再使用它了。当我点击 Visual Studio 中的发布时,它会构建并显示
"========== Publish: 1 succeeded, 0 failed, 0 skipped =========="
但在那之后打开的网络浏览器选项卡中(通常会出现 "This mobile app is up and running" 屏幕)它会将我发送到 https://login.microsoftonline.com/{domain}.onmicrosoft.com/oauth2/v2.0/authorize?response_type=...
并在之后立即将我重定向到 msala{custom-redirect-uri}://auth
这是我本机应用程序中 Azure AD B2C 的重定向 URI。
此外,在 Azure 门户中我的应用服务的 activity 日志中,我没有看到更新。当我查询数据库时,结构没有按应有的方式改变。
那么那里发生了什么以及为什么重定向到自定义重定向 URI? Azure AD B2C 与发布后端项目有什么关系?
更新:
检查打开的网页,我看到以下内容:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' >
<html xmlns = 'http://www.w3.org/1999/xhtml' >
<head>
<title> Logging in... </title>
<meta name = 'CACHE-CONTROL' content = 'NO-CACHE' />
<meta name = 'PRAGMA' content = 'NO-CACHE' />
<meta name = 'EXPIRES' content = '-1' />
</head>
<body >
<form id = 'auto' method = 'post' action = 'msal{Client_id}://auth'>
<div>
<input type = 'hidden' name = 'error' id = 'error' value = 'redirect_uri_mismatch' />
<input type = 'hidden' name = 'error_description' id = 'error_description' value = 'AADB2C90006: The redirect URI 'https://{domain}.azurewebsites.net/.auth/login/aad/callback' provided in the request is not registered for the client id '{Client_id}'.
Correlation ID: 9569081c-2779-41e8-8b20-095384de402f
Timestamp: 2018-02-06 18:53:38Z
'/>
<input type = 'hidden' name = 'state' id = 'state' value = 'redir=%2F' />
</div>
<div id = 'noJavascript' style = 'visibility: visible; font-family: Verdana' >
<p> Although we have detected that you have Javascript disabled, you will be able to use the site as normal. </p>
<p> As part of the authentication process this page may be displayed several times.Please use the continue button below. </p>
<input type = 'submit' value = 'Continue' />
</div>
<script type = 'text/javascript' >
< !--
document.getElementById('noJavascript').innerHTML = '';
document.getElementById('auto').submit();
//-->
</script></form></body></html>
我仍然没有看到从我的本机应用程序客户端(客户端 ID)到我的 .Net 后端应用程序服务的连接。当然它们是连接的,但是帽子不应该对后端发布有任何影响
'error_description' id = 'error_description' value = 'AADB2C90006: The redirect URI 'https://{domain}.azurewebsites.net/.auth/login/aad/callback' provided in the request is not registered for the client id '{Client_id}'
如果我没理解错的话,你说的是 Xamarin 应用程序。通常,我们会在 Azure Active Directory B2C 租户中注册移动/本机应用程序,并设置自定义重定向 URI/重定向 URI。详情可以关注Register your application.
然后我们将在移动客户端中使用 MSAL 检索令牌,并使用 Client-managed authentication 发送令牌以向移动应用后端进行身份验证,如下所示:
var payload = new JObject();
if (authenticationResult != null && !string.IsNullOrWhiteSpace(authenticationResult.IdToken))
{
payload["access_token"] = authenticationResult.IdToken;
}
var user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,payload);
根据您的描述,我假设您已将 请求未通过身份验证时采取的操作 设置为 Log in with Azure Active Directory
在您的 "SETTINGS > Authentication / Authorization" 部分移动应用。默认情况下,如果您通过浏览器访问手机,它将使用 Server-managed authentication,此时您需要在 AAD 应用程序的重定向 URI 下设置 https://{your-mobileapp-name}.azurewebsites.net/.auth/login/aad/callback
。
此外,这里还有一些有用的教程,大家可以参考一下:
Authenticating Users with Azure Active Directory B2C
注意:对于服务器流程示例,您不需要使用MSAL,您只需使用特定提供商直接重新登录您的移动应用程序,如下所示:
var user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, Constants.URLScheme);
并且您需要 Add your app to the Allowed External Redirect URLs Azure 门户上的移动客户端应用程序。
更新:
But nevertheless, the changes I made were not reflected in he Azure DB. But this seems to be a problem with EF Migration on application start, which has to be configured first
对于 EF 迁移,如果您禁用自动迁移,默认情况下您的数据库 Initializer 将为 CreateDatabaseIfNotExists
,当您的应用程序第一次访问数据库时,如果数据库不存在,它将创建该数据库。或者您可以启用自动迁移并在 Startup.MobileApp.cs 文件的 ConfigureMobileApp
方法下调用 new DbMigrator(new Migrations.Configuration()).Update()
,此时更改将在应用程序启动时应用。
因为您使用的是 ClientFlow,并且没有在 AAD 应用的重定向 URI 下配置 https://{your-mobileapp-name}.azurewebsites.net/.auth/login/aad/callback
。在通过 VS 将您的应用程序发布到 Azure 端之前,您可以将 LaunchSiteAfterPublish
设置为 False
在您的 <your-mobile-app-name> - Web Deploy.pubxml
文件下,正如您评论的那样,在发布成功完成后禁用自动启动您的网站.
我正在 Publish the server project
之后发布我的 Azure 应用服务(.Net 后端)这曾经有效,但现在我无法再使用它了。当我点击 Visual Studio 中的发布时,它会构建并显示
"========== Publish: 1 succeeded, 0 failed, 0 skipped =========="
但在那之后打开的网络浏览器选项卡中(通常会出现 "This mobile app is up and running" 屏幕)它会将我发送到 https://login.microsoftonline.com/{domain}.onmicrosoft.com/oauth2/v2.0/authorize?response_type=...
并在之后立即将我重定向到 msala{custom-redirect-uri}://auth
这是我本机应用程序中 Azure AD B2C 的重定向 URI。
此外,在 Azure 门户中我的应用服务的 activity 日志中,我没有看到更新。当我查询数据库时,结构没有按应有的方式改变。
那么那里发生了什么以及为什么重定向到自定义重定向 URI? Azure AD B2C 与发布后端项目有什么关系?
更新:
检查打开的网页,我看到以下内容:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' >
<html xmlns = 'http://www.w3.org/1999/xhtml' >
<head>
<title> Logging in... </title>
<meta name = 'CACHE-CONTROL' content = 'NO-CACHE' />
<meta name = 'PRAGMA' content = 'NO-CACHE' />
<meta name = 'EXPIRES' content = '-1' />
</head>
<body >
<form id = 'auto' method = 'post' action = 'msal{Client_id}://auth'>
<div>
<input type = 'hidden' name = 'error' id = 'error' value = 'redirect_uri_mismatch' />
<input type = 'hidden' name = 'error_description' id = 'error_description' value = 'AADB2C90006: The redirect URI 'https://{domain}.azurewebsites.net/.auth/login/aad/callback' provided in the request is not registered for the client id '{Client_id}'.
Correlation ID: 9569081c-2779-41e8-8b20-095384de402f
Timestamp: 2018-02-06 18:53:38Z
'/>
<input type = 'hidden' name = 'state' id = 'state' value = 'redir=%2F' />
</div>
<div id = 'noJavascript' style = 'visibility: visible; font-family: Verdana' >
<p> Although we have detected that you have Javascript disabled, you will be able to use the site as normal. </p>
<p> As part of the authentication process this page may be displayed several times.Please use the continue button below. </p>
<input type = 'submit' value = 'Continue' />
</div>
<script type = 'text/javascript' >
< !--
document.getElementById('noJavascript').innerHTML = '';
document.getElementById('auto').submit();
//-->
</script></form></body></html>
我仍然没有看到从我的本机应用程序客户端(客户端 ID)到我的 .Net 后端应用程序服务的连接。当然它们是连接的,但是帽子不应该对后端发布有任何影响
'error_description' id = 'error_description' value = 'AADB2C90006: The redirect URI 'https://{domain}.azurewebsites.net/.auth/login/aad/callback' provided in the request is not registered for the client id '{Client_id}'
如果我没理解错的话,你说的是 Xamarin 应用程序。通常,我们会在 Azure Active Directory B2C 租户中注册移动/本机应用程序,并设置自定义重定向 URI/重定向 URI。详情可以关注Register your application.
然后我们将在移动客户端中使用 MSAL 检索令牌,并使用 Client-managed authentication 发送令牌以向移动应用后端进行身份验证,如下所示:
var payload = new JObject();
if (authenticationResult != null && !string.IsNullOrWhiteSpace(authenticationResult.IdToken))
{
payload["access_token"] = authenticationResult.IdToken;
}
var user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,payload);
根据您的描述,我假设您已将 请求未通过身份验证时采取的操作 设置为 Log in with Azure Active Directory
在您的 "SETTINGS > Authentication / Authorization" 部分移动应用。默认情况下,如果您通过浏览器访问手机,它将使用 Server-managed authentication,此时您需要在 AAD 应用程序的重定向 URI 下设置 https://{your-mobileapp-name}.azurewebsites.net/.auth/login/aad/callback
。
此外,这里还有一些有用的教程,大家可以参考一下:
Authenticating Users with Azure Active Directory B2C
注意:对于服务器流程示例,您不需要使用MSAL,您只需使用特定提供商直接重新登录您的移动应用程序,如下所示:
var user = await TodoItemManager.DefaultManager.CurrentClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, Constants.URLScheme);
并且您需要 Add your app to the Allowed External Redirect URLs Azure 门户上的移动客户端应用程序。
更新:
But nevertheless, the changes I made were not reflected in he Azure DB. But this seems to be a problem with EF Migration on application start, which has to be configured first
对于 EF 迁移,如果您禁用自动迁移,默认情况下您的数据库 Initializer 将为 CreateDatabaseIfNotExists
,当您的应用程序第一次访问数据库时,如果数据库不存在,它将创建该数据库。或者您可以启用自动迁移并在 Startup.MobileApp.cs 文件的 ConfigureMobileApp
方法下调用 new DbMigrator(new Migrations.Configuration()).Update()
,此时更改将在应用程序启动时应用。
因为您使用的是 ClientFlow,并且没有在 AAD 应用的重定向 URI 下配置 https://{your-mobileapp-name}.azurewebsites.net/.auth/login/aad/callback
。在通过 VS 将您的应用程序发布到 Azure 端之前,您可以将 LaunchSiteAfterPublish
设置为 False
在您的 <your-mobile-app-name> - Web Deploy.pubxml
文件下,正如您评论的那样,在发布成功完成后禁用自动启动您的网站.