通过 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 &#39;https://{domain}.azurewebsites.net/.auth/login/aad/callback&#39; provided in the request is not registered for the client id &#39;{Client_id}&#39;.
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

此外,这里还有一些有用的教程,大家可以参考一下:

TodoAzureAuthADB2CClientFlow

Authenticating Users with Azure Active Directory B2C

TodoAzureAuthADB2CServerFlow

注意:对于服务器流程示例,您不需要使用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 文件下,正如您评论的那样,在发布成功完成后禁用自动启动您的网站.