通过Visual Studio发布Azure App Service失败

时间:2018-02-04 16:04:10

标签: azure azure-mobile-services azure-ad-b2c azure-web-app-service

我正在Publish the server project

之后发布我的Azure应用服务(.Net后端)

过去常常工作,但现在我无法继续工作了。当我在Visual Studio中单击发布时,它会构建并说

"========== Publish: 1 succeeded, 0 failed, 0 skipped =========="

但是在之后打开的网络浏览器标签中(通常是"此移动应用已启动且正在运行"屏幕出现),它会将我发送到https://login.microsoftonline.com/{domain}.onmicrosoft.com/oauth2/v2.0/authorize?response_type=...,然后将我重定向到msala{custom-redirect-uri}://auth,这是我原生应用中Azure AD B2C的重定向URI。

同样在Azure门户中我的应用服务的活动日志中,我没有看到更新。当我查询数据库时,结构不会发生变化。

那么在那里发生了什么以及为什么重定向到自定义重定向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后端应用服务的连接。当然它们是相互联系的,但帽子应该对他后期发布产生任何影响

1 个答案:

答案 0 :(得分:0)

  

'error_description'id ='error_description'value ='AADB2C90006:提供的重定向URI'https:// {domain} .azurewebsites.net / .auth / login / aad / callback '请求未注册客户端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);

根据您的说明,我假设您在移动应用的“设置&gt;身份验证/授权”部分下设置了请求未经过身份验证时采取的操作Log in with Azure Active Directory 。默认情况下,如果您通过浏览器访问移动设备,则会使用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门户上的移动客户端应用程序。

<强>更新

  

但是,我所做的更改并未反映在Azure DB中。但这似乎是应用程序启动时EF Migration的问题,必须先配置

对于EF迁移,如果禁用自动迁移,默认情况下,数据库初始化程序将为CreateDatabaseIfNotExists,当您的应用程序第一次访问数据库时,如果不存在,则会创建数据库。或者,您可以启用自动迁移并在Startup.MobileApp.cs文件的new DbMigrator(new Migrations.Configuration()).Update()方法下调用ConfigureMobileApp,此时更改将应用​​于应用程序启动。

由于您使用的是ClientFlow,因此请勿在AAD应用的重定向URI下配置https://{your-mobileapp-name}.azurewebsites.net/.auth/login/aad/callback。在通过VS将您的应用程序发布到Azure端之前,您可以在评论时将LaunchSiteAfterPublish设置为False文件下的<your-mobile-app-name> - Web Deploy.pubxml,以便在发布成功完成后禁用自动启动网站