保留 Azure 移动服务的自定义 API 调用的用户身份验证
preserving user authentication for customAPI calls of azure mobile services
我在我的混合应用程序中使用了AzureMobileServices自定义API。自定义API名称是"userUtils"。登录和身份验证部分效果很好,我能够使用 facebook/google oAuth 对用户进行身份验证。登录后,在其完成函数中,我调用一个自定义API函数 - 插入(http POST) - 如果尚未添加,则基本上将用户添加到docDB中。并将用户详细信息返回给我的JS客户端。(我已将此自定义API的"POST"权限设置为"具有应用程序密钥的用户"(顺便说一句,此权限设置是否正确,还是应该是"仅经过身份验证的用户"?
//below code is part of a typescript file
this._zumoClient = new WindowsAzure.MobileServiceClient( "https://abcdefExample.azure-mobile.net/", "someExampleApplicationKey");
...
....
....
public authenicateUser(p_oAuthProvider: string) {
var p: Promise<any> = new Promise(
(resolve: (result: any) => void, reject: (err: any) => void) =>
this._zumoClient.login(p_oAuthProvider, null).done(
(loginResult) => {
console.log("login returned with result : " + loginResult.userId);
var theUserAuthId = loginResult.userId;
this._zumoClient.invokeApi('UserUtils/insert', {
method: 'POST',
body: { userAuthId: theUserAuthId }
})
.done(
(loginResult: any) => {
resolve(loginResult)
},
(loginErr: any) => {
reject(loginErr);
}
);
},
(loginErr: any) => {
reject(loginErr);
}
)
);
return p;
}
对我的自定义API的第一次"调用API"效果很好。
但是,在稍后的一点上,我尝试调用另一个自定义API"usersSocialContacts"(http GET),我得到401 - "未经授权的请求"(我已将"get"权限设置为"仅经过身份验证的用户"对于此自定义API)。
public getUserSocialContacts() {
var p: Promise<any> = new Promise(
(resolve: (result: any) => void, reject: (err: any) => void) =>
this._zumoClient.invokeApi('UserUtils/userSocialContacts', {
method: 'GET'
})
.done(
(contactsResult: any) => {
console.log("got contacts -" + JSON.stringify(contactsResult));
resolve(contactsResult);
},
(contatcsErr: any) => {
reject(contatcsErr);
}
)
);
return p;
}
如果我将此自定义API的GET权限设置为"允许用户使用应用程序密钥",则调用api函数,但request.user未定义。
这是如何工作的,如何让自定义 API 让知道该用户已经过身份验证,并在每个请求中从 js 客户端传递用户。我阅读了一些 SO 问题或其他谷歌搜索中的一些建议,以缓存用户的身份验证令牌并在登录调用中使用可选的过滤器对象将其在每个请求中传递给 zumo 服务,找到了一些 C#/.net 的示例,但没有找到任何清晰的示例或文档 javascript 客户端,也许我错过了。Azure 文档提供了从 js 客户端调用自定义 API 的 js 示例,但未显示缓存部分并在后续请求中发送经过身份验证的用户。
希望在这方面有任何知识共享或任何指向正确文档的指示。
如果您只想登录用户访问自定义 api,则需要将权限设置为"仅经过身份验证的用户"。
用户登录后,如果您使用的是移动服务客户端的同一实例(未注销),则对 zumo 服务发出的任何请求都应包含 zumo 身份验证令牌。
- 同步调用,直到用户通过angular验证为访问者
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 如何使用Ajax调用特定的控制器和操作来重定向用户
- Can用户'MediaWiki上的自定义JavaScript调用Lua模块
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 如何在 Mozilla 插件中调用用户函数
- 如何在视图中保存用户输入内容,并在离开页面时对控制器进行后期调用
- 每次用户键入时调用函数
- 提示用户通过AJAX调用保存文件
- 如何通过ajax调用将用户重定向到页面
- 调用按钮单击事件 ajax 加载的用户控件
- 如何通过声云 api 调用获取用户 ID
- 防止客户端滥用/欺骗奖励用户的重复 Ajax 调用
- Ajax 调用在 IOS 中的用户交互之前不起作用
- 如何在没有JQuery的情况下,通过对服务器的基本ajax调用,根据浏览器上的用户活动保持服务器会话活动
- 从 aspx 页调用用户控件中的 jquery 函数
- 输入类型=文件onchange事件获胜't在调用用户定义函数时激发
- 如何从一个Javascript函数调用用户控件
- jQuery在函数中调用用户定义的函数