如何保护azure移动服务/ html - javascript

时间:2014-04-09 04:37:04

标签: azure azure-mobile-services

当我调用像gmail这样的oauth提供程序并且我得到令牌时,我怎样才能确保我以后进行的所有调用都来自进行身份验证的同一个客户端?也就是说,是否有某种安全令牌我应该通过打包?我每次都会传回那个令牌吗?

例如,如果我有一个简单的数据表用于具有first,last,birthdate,id的留言簿。如何确保“拥有”该记录的用户是唯一可以更新该记录的用户。此外,我怎样才能确保唯一可以看到自己生日的人就是认证的人。

抱歉这个令人困惑的问题,我无法理解azure移动服务(构成一个HTML客户端)如何以任何方式保密。

1 个答案:

答案 0 :(得分:0)

我最近试图解决这个问题,这是我理解它的方式(可能有点太多细节),使用canonical ToDoList applicationserver authentication enabled for Google

在这种情况下,当您将身份验证外包给Google时,您正在执行标准的OAuth 2.0授权代码授予流程。您在Google上注册了自己的应用,获得了客户ID和密码,然后您就可以在AMS上注册您的应用。当您单击HTML ToDoList应用程序上的“登录”时快速转发:AMS通过提供有关它的信息(客户端ID和密码)代表您的应用程序请求授权代码,最终导致Google的帐户选择器/登录屏幕。选择帐户并成功登录后,Google将重定向到您的AMS应用程序的URL,并将授权代码作为查询字符串参数附加。然后,AMS代表您的应用程序从Google兑换此授权码以获取访问令牌,创建一个新的用户对象(如下所示),并将其返回给您的应用:

"userId":"Google:11223344556677889900"
"authenticationToken":"eyJhbGciOiJb ... GjNzw"

调用Login function后会返回这些属性,并将其包含在User object中。 authenticationToken可用于通过将其附加到请求的X-ZUMO-AUTH标头中来对AMS进行经过身份验证的调用,至少在它到期之前。

就安全性而言,上述所有情况都发生在HTTPS下,该令牌仅适用于当前登录的用户,令牌在预定时间到期(我不知道有多长时间)。

解决您的理论示例,如果您的表的权限已配置为仅允许经过身份验证的用户,则可以通过编写逻辑来进一步锁定内容,以便在显示生日时检查userId属性。有关详细信息,请参阅reference docs for the User object