403.60 - 使用 Azure 移动应用对 Cordova 进行身份验证时出现禁止错误

Posted

技术标签:

【中文标题】403.60 - 使用 Azure 移动应用对 Cordova 进行身份验证时出现禁止错误【英文标题】:403.60 - Forbidden error authenticating Cordova with Azure Mobile Apps 【发布时间】:2016-06-27 06:37:29 【问题描述】:

解决方案Phonegap oauth2 redirect issue 身份验证适用于设备,但不适用于 Ripple 仍在试图弄清楚如何让它在 Ripple 上工作

最初的问题 我正在按照教程创建一个带有针对 Azure 应用服务的身份验证的入门 Cordova 应用: https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-cordova-get-started-users/ 和 https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-how-to-configure-microsoft-authentication/

我可以直接浏览 zumotest4.azurewebsites.net 上的应用服务,但 Cordova 应用(由 Azure 移动应用快速入门生成)失败。 azure 移动服务调用 client.login('microsoftaccount'); 确实会启动 OAuth 登录页面,但在提交凭据后,OAuth 登录屏幕会保持打开状态并显示空白屏幕。网络跟踪显示回调的 403 禁止失败。 Azure 应用服务错误日志将错误报告为 HTTP 错误 403.60 - 禁止。

后端 = .NET (C#)

当请求未通过身份验证时,服务器设置为“允许请求(无操作)”。待办事项控制器设置为 [Authorize]。

    [Authorize]
    public class TodoItemController : TableController<TodoItem>
    ...

Microsoft 注册应用程序配置:

-移动或桌面客户端应用程序:是

-目标域:空白

-限制 JWT 发行:是

-根域:zumotest4.azurewebsites.net

-重定向网址:

*https://zumotest4.azurewebsites.net/.auth/login/microsoftaccount/callback

*https://zumotest4.azurewebsites.net/.auth/login/microsoftaccount

*https://zumotest4.azurewebsites.net/.auth/login/done 

*https://zumotest4.azurewebsites.net

Cordova 客户端 CSP: &lt;meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://login.windows.net https://login.live.com https://zumotest4.azurewebsite...; style-src 'self'"&gt;

Cordova 客户端 index.js:

function onDeviceReady() 
    client = new WindowsAzure.MobileServiceClient('https://zumotest4.azurewebsites.net');

    // Login to the service
    client.login('microsoftaccount')
        .then(function () 
            // BEGINNING OF ORIGINAL CODE

            // Create a table reference
            todoItemTable = client.getTable('todoitem');

            // Refresh the todoItems
            refreshDisplay();

            // Wire up the UI Event Handler for the Add Item
            $('#add-item').submit(addItemHandler);
            $('#refresh').on('click', refreshDisplay);

            // END OF ORIGINAL CODE

        , handleError);

网络追踪:

姓名:https://zumotest4.azurewebsite..."%"3dc28004776f304afca14c71b77d660d8d_20160311125405"%"26redir"%"3d" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: en-US,en;q=0.8" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/48.0.2564.116 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Referer: https://login.live.com/oauth20..."%"3A"%"2F"%"2Fzumotest4.azurewebsites.net"%"2F.auth"%"2Flogin"%"2Fmicrosoftaccount"%"2Fcallback&amp;response_type=code&amp;scope=wl.basic&amp;state=nonce"%"3Dc28004776f304afca14c71b77d660d8d_20160311125405"%"26redir"%"3D" -H "Cookie: CompletionOrigin=http://localhost:4400; CompletionType=postMessage; Nonce=JpK4rfK4vvSKl3Mr6xhuJdy5b0xzu2nls5zL4ShiBrxVjw64e9n9/JXXhLlOeq3S8Pn9YFfV9G2RGowbFB4YZem5vCGwDWHV3vHoa0iT3/XvHHA9SAOD5AjlXxN3ffbk; AppServiceSessionMode=token; ARRAffinity=45469bcdd9e2de45e5ee43c5a6d02e5e7b574ac8ea3eb9b10e5cce208e5268b6" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed

状态:403 - 禁止

类型:文档

发起者:https://zumotest4.azurewebsite..."%"3dc28004776f304afca14c71b77d660d8d_20160311125405"%"26redir"%"3d" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: en-US,en;q=0.8" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Referer: https://login.live.com/oauth20..."%"3A"%"2F"%"2Fzumotest4.azurewebsites.net"%"2F.auth"%"2Flogin"%"2Fmicrosoftaccount"%"2Fcallback&amp;response_type=code&amp;scope=wl.basic&amp;state=nonce"%"3Dc28004776f304afca14c71b77d660d8d_20160311125405"%"26redir"%"3D" -H "Cookie: CompletionOrigin=http://localhost:4400; CompletionType=postMessage; Nonce=JpK4rfK4vvSKl3Mr6xhuJdy5b0xzu2nls5zL4ShiBrxVjw64e9n9/JXXhLlOeq3S8Pn9YFfV9G2RGowbFB4YZem5vCGwDWHV3vHoa0iT3/XvHHA9SAOD5AjlXxN3ffbk; AppServiceSessionMode=token; ARRAffinity=45469bcdd9e2de45e5ee43c5a6d02e5e7b574ac8ea3eb9b10e5cce208e5268b6" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed

提前感谢您的帮助。

【问题讨论】:

作为参考,您能否告诉我们:1)如果您在调试/涟漪环境中运行cordova应用程序,控制台中是否有任何错误消息以及2)cordova-ms的版本-azure-mobile-apps 你在运行吗? 请注意,我在原始问题上添加了一个“解决方案”。问题是瑞波币。身份验证在模拟器中工作。我正在使用 Azure 快速入门自动包含的 cordova-plugin-ms-azure-mobile-apps 的 version="2.0.0-beta4"。如果身份验证可以在 Ripple 中工作,这对它的速度来说很方便。 【参考方案1】:

要在浏览器中进行身份验证,还需要一些额外的步骤。请参阅此 GitHub 问题中提到的解决方案:https://github.com/Azure/azure-mobile-apps-js-client/issues/81。如果有帮助,请告诉我。

【讨论】:

这些更新对我有用,让 Ripple 正常工作。非常感谢你们!

以上是关于403.60 - 使用 Azure 移动应用对 Cordova 进行身份验证时出现禁止错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?

将 Azure 移动应用服务与现有 SQL 数据库一起使用

有没有办法对通过 Azure 移动服务同步更新的本地 Sqlite 做出反应?

将 Azure 移动服务迁移到 Azure 移动应用:UserId 已更改

Azure 移动应用服务安全

Azure 移动服务推送不起作用